scala - 如何将 Scala 私有(private)范围限制为仅一个对象?

标签 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]              ^

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

最佳答案

来自 the Scala Language specification, section 5.2.1 :

A private modifier can be qualified with an identifier C (e.g. private[C]) that must denote a class or package enclosing the definition. Members labeled with such a modifier are accessible respectively only from code inside the package C or only from code inside the class C and its companion module.

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

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

关于scala - 如何将 Scala 私有(private)范围限制为仅一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32294741/

相关文章:

scala - 在 Scala 特征中获取命令行参数

list - Haskell - 难以理解一小段代码

php - 如何使用另一个对象实例初始化 PHP 类的实例?

c# - 循环列表空元素

java - 无法通过类方法更改对象的值

java - 为什么 scala.util.matching.Regex 'apparently' 在 Scala 提取器中失败?

scala - 我可以在 Scala 中创建具有 Java 保护访问权限的方法吗?

scala - 如何解决 akka 版本兼容性问题?

javascript - 在数组对象中查找一个值并使用该对象中的另一个值

java - 获取一个 ArrayList,其中包含某些对象类型的两个不同大小的 arraylist 的并集