2016-02-16 74 views
1

我想創建一個生成輔助構造函數{的主體)的宏。是否有可能做到這一點,而不訴諸宏觀註釋? (即宏觀天堂插件)是否有可能在Scala中創建沒有宏註釋的輔助構造函數?

例如:

事情是這樣的:

class A(a : String, b : String) { 
    def this(s : List[Any]) = macro fromlist 
} 

應相當於是這樣的:

class A(a : String, b : String) { 
    def this(s : List[Any]) = this(s.head.toString, s.tail.head.toString) 
} 

僅僅使用了 「宏」關鍵字似乎沒有幫助。這是完全不允許在普通的斯卡拉?謝謝。

回答

0

問題是,構造函數不是返回新實例的方法,而是初始化已創建實例的方法。 (所以你的構造函數定義中的=沒有意義,父構造函數不返回任何東西)。

接下來的問題是,Scala中的另一個構造函數不得不調用另一個構造函數作爲第一步,你不能調用其他構造函數,甚至不能調用宏。

你可以然而調用宏生成參數此,像

this(fromList(s): _*) 

但是,爲什麼甚至想做到這一點? Scala中很少有多個構造函數。常用的方法是在伴隨對象中使用重載的應用程序方法。你沒有任何限制。

+0

我想爲60+字段的case類創建裝飾器。 (我知道這聽起來更糟糕)。重載的應用程序沒有幫助,因爲裝飾對象必須是裝飾器的超類。 –

相關問題