我有一個case class(我們將其命名爲Stuff
),我希望能夠通過擴展特徵(稱爲Marker
)在運行時創建匿名子類。這裏有一個REPL會話的片段,說明了什麼我想要做的事:允許使用大小寫類的構造函數嗎?
scala> trait Marker
defined trait Marker
scala> case class Stuff(i: Int)
defined class Stuff
scala> val a = Stuff(1)
a: Stuff = Stuff(1)
scala> val b = new Stuff(1) with Marker
b: Stuff with Marker = Stuff(1)
注a
如何使用Stuff.apply()
,而在b
的情況下我打電話的情況下類的構造函數實例。
我的問題是:是使用構造函數實例化類案例類?在我看來,這是由於案例分類提供的常見便利,例如==
,.equals()
和.hashCode()
,所有工作。我是否錯過任何能夠標示我在做什麼的東西Bad Thing(TM)?
scala> a == b
res0: Boolean = true
scala> a.equals(b)
res1: Boolean = true
scala> a.hashCode == b.hashCode
res2: Boolean = true
我看到的唯一潛在的小問題是模式匹配。上面的'b'不會匹配Stuff(_),但'val c:Stuff = new Stuff(1)with Marker'會匹配得很好。 – 2010-09-22 20:05:58
它確實匹配,請參閱更新。 – 2010-09-22 20:55:19
我認爲@Max的意思是:http://paste.pocoo.org/show/266270/ – missingfaktor 2010-09-23 16:27:25