1

我定义了以下代码(在带有 Scala 2.10 的 Scala IDE/Scala 工作表中):

object WorkSheet1 {
  object A {
    def apply(s: String, huh: Boolean = false): A = A(s)
  }
  case class A (s: String)
  //case class A private (s: String)
  val a = A("Oh, Hai")
}

我成功收到以下输出:

a : public_domain.WorkSheet1.A = A(哦,海)

但是,当我注释掉现有的case class A (s: String)并取消注释另一个(包含“私有”)时,我收到以下编译器错误:“无法在对象 WorkSheet1 中访问类 A 中的构造函数 A”。

据我了解,伴生对象可以访问其伴生类的所有私有部分。呵呵。呃……不过,说真的。是什么赋予了?

4

1 回答 1

5

对除 As 以外的任何人保密

object WorkSheet1 {
  object A {
    def apply(s: String, huh: Boolean = false): A = A(s)
  }
  case class A private[A](s: String)
  val a = A("Oh, Hai", false)
}

我添加了 false 以解决对象应用和公开可见的案例类构造函数之间的歧义。

于 2013-10-04T21:14:18.457 回答