2013-07-08 22 views
3

鑑於簡單的類層次結構產生父類的構造在斯卡拉

abstract sealed class Base(id: String) 

case class Child1(id: String, value: Int) extends Base(id) 

case class Child2(id: String, value: Long, file: File) extends Base(id) 

我可以使用宏或類似的東西,以避免將ID到基地(並指示編譯器生成這對我來說)?只有一個參數,通過它並不難,但是在多個參數的情況下,它會變得不舒服。

或者如果我可以省略子類中id的規範,並使編譯器從基類中爲我生成一個?

+0

謝謝!這已經在我的待辦事項清單上問了一段時間。 – sourcedelica

回答

3

可以使基地的特點:

sealed trait Base { 
    val id: String 
} 

case class Child1(id: String, value: Int) extends Base 
case class Child2(id: String, value: Long, file: File) extends Base 
+1

我不認爲你必須在case類中的'id'前面寫'val'。所有的構造函數參數都是'vals'。 – gzm0

+0

這很好,謝謝。仍然我想知道是否有可能從父類的參數生成子類的構造函數? – jdevelop

+0

@jdevelop我對宏並不擅長,但正如我從Evgene Burmarko在ScalaDays2013上的演講中所記得的那樣,目前宏不能生成一流的實體(類,特性) – 4lex1v