在“Scala 编程”一书中的第 22 章中,::
类(缺点)定义为
final case class ::[T](hd: T, tl: List[T]) extends List[T] {
//...
}
::
类中的方法 List
定义如下:def ::[U >: T](x: U): List[U] = new scala.::(x, this)
为什么是
new
需要创建 final
的实例 case
class ::
?这纯粹是为了消除歧义吗?
最佳答案
使用案例类,您会自动获得一个伴生对象,其 apply
方法调用构造函数,与使用普通类执行此操作的方式相同:
class Foo(val value: Int)
object Foo { def apply(value: Int) = new Foo(value) }
val x = new Foo(42) //
val y = Foo(42) // both work the same
您可以使用
new
实例化案例类如果你想。理论上它可能会稍微快一点,因为它不必通过伴随对象的 apply
方法,但我尝试了一个快速基准测试并发现性能绝对没有差异,所以我猜它是由编译器优化的,或者与实际构造相比只是一个不可估量的小差异。所以我不认为
new
在你给出的例子中有任何意义,也可以被排除在外。
关于class - 在 Scala final case 类中使用 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8514333/