我有一个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