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

Posted

技术标签:

【中文标题】如何将 scala 私有范围仅限于一个对象?【英文标题】:How restrict scala private scope to one object only? 【发布时间】: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,那就太奇怪了。 【参考方案1】:

来自the Scala Language specification, section 5.2.1:

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

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

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

【讨论】:

以上是关于如何将 scala 私有范围仅限于一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

将Python函数范围仅限于局部变量

是否可以将ServiceStack.Text.JsConfig设置范围仅限于您的库?

javaweb之jsp的属性范围

从 Java 可见的 Scala 中的包私有范围

有没有办法从输入类型中删除箭头,但将其范围仅限于特定组件?

Mysql列表日期范围之间的日期,但仅限于一周中的特定日期