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

时间:2015-08-30 08:35:51

标签: 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
}

编译时我收到错误:

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

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

1 个答案:

答案 0 :(得分:6)

来自the Scala Language specification, section 5.2.1

  

私有修饰符可以限定,标识符为 C (例如private[C]),必须表示包含定义的类或包 STRONG>。标有此类修饰符的成员只能分别从包 C 中的代码访问,或者只能从类 C 及其配套模块中的代码访问。

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

因此,您的示例无法编译,因为my.pack.MyObject不是封闭 val Some声明。