【问题标题】:How restrict scala private scope to one object only?如何将 scala 私有范围仅限于一个对象?
【发布时间】:2015-11-24 12:19:47
【问题描述】:

我试图指定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]              ^

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

【问题讨论】:

  • 所以您想限制对val Some 的访问权限为分配对象以外的对象?我可能只是感到困惑,但Config 是否应该能够在无法访问 Some 时为其赋值?你能解释一下这个用例吗?
  • 如果您可以进行范围界定以使Config 对象无法访问其自己的val,那就太奇怪了。

标签: scala class object access-modifiers


【解决方案1】:

来自the Scala Language specification, section 5.2.1

私有修饰符可以限定带有标识符C(例如private[C]),必须表示包含定义的类或包 .用这种修饰符标记的成员分别只能从包 C 内的代码或只能从类 C 及其配套模块内的代码访问。

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

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

【讨论】:

    猜你喜欢
    • 2012-02-03
    • 2013-10-21
    • 2023-03-12
    • 1970-01-01
    • 2013-01-20
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    相关资源
    最近更新 更多