私有[this] w / Case Class Parameters

时间:2016-12-27 18:38:09

标签: scala

假设:

$scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.

scala> :paste
// Entering paste mode (ctrl-D to finish)

object F { def f(a: A) = a.hidden }
case class F(private [this] val hidden: Int)

// Exiting paste mode, now interpreting.

<console>:12: error: private[this] not allowed for case class parameters
       case class F(private [this] val hidden: Int)
                                       ^

为什么案例类参数不允许private [this]

1 个答案:

答案 0 :(得分:4)

允许private[this]可能会破坏F上的模式匹配,因为F.unapply无法访问进行正确比较所需的值。编译器可能会找到一种方法来处理对象私有成员,因为unapply无论如何都会编译为静态,但它会使事情变得非常复杂。

SI-1422讨论了在案例类中使用private[this]时出现的错误,并且在没有太多公开讨论的情况下将其从语言中删除。似乎修复行为本来就太复杂了,无法覆盖一个用例,实际上不应该是案例类的用例。

以下是引入编译器错误的commit