如何将scala私有范围限制为仅一个对象?

Che*_*rry 3 scala class object access-modifiers

我试图指定val常量只对一个对象可见:

object Config {
    private[my.pack.MyObject] val Some = Option("String")
}

// in package my.pack
object MyObject {
    val Other = Config.Some
}
Run Code Online (Sandbox Code Playgroud)

在编译时我得到一个错误:

[error] C:\path\Config.scala:17: ']' expected but '.' found.
[error]   private[my.pack.MyObject] val Some = Option("String")
[error]              ^
Run Code Online (Sandbox Code Playgroud)

怎么了?当我读到访问限定符时,它们可以是类或对象,而不是包,我错了吗?

sjr*_*jrd 6

Scala语言规范,第5.2.1节:

私有修饰符可以使用标识符C(例如)进行限定,标识符C 必须表示包含该定义的类或包.标有这种修饰符的成员只能分别从C语言包中的代码访问,或者只能从C类及其伴随模块中的代码访问.private[C]

(大胆的我 - 注意"类或包"也承认"对象",不确定这是规范中的标准语言,还是规范中的错误)

所以你的例子没有编译,因为my.pack.MyObject它不是一个封闭的声明val Some.