是否有理由限制一个值类无法包装另一个值类?
这似乎是一件显而易见的事情,并将好处进一步扩展到类层次结构中。如果A
可以被视为仅编译时,并且在幕后使用类class C(val y: B) extends AnyVal
,那么B
可以做同样的事情会很好。它以透明方式实现为A
,它在JVM中在运行时透明地实现为C
,因此所有效率和gc开销优势都延续到类{{1}}。
为什么要限制?
答案 0 :(得分:3)
这是一项实施限制。它在Dotty被解除了:
$ dotr
Starting dotty REPL...
scala> case class C1(i: Int) extends AnyVal
// defined case class C1
scala> case class C2(c1: C1) extends AnyVal
// defined case class C2
scala> val x = C2(C1(1))
val x: C2 = C2(C1(1))