如何将 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 私有范围仅限于一个对象?的主要内容,如果未能解决你的问题,请参考以下文章