Scala的访问修饰符有哪些参数?

4
什么是两者之间的区别?
class Test {
  private[this] val foo = 0
}

vs

class Test {
  private val foo = 0
}

方括号[]中可以放置什么?当我想查找其规范时,应该搜寻什么关键字?我尝试通过谷歌搜索"scala access modifier arguments/parametrized scala access modifier"等多种组合关键字,但没有任何结果。

2个回答

7

当我想要查看规格时,我应该搜索什么?

Scala语言规范中,它被定义为“访问修饰符”和“访问限定符”(请参见§5.2中的BNF)。

有什么区别?

...

[]中可以放什么?

您可以将类名称、包名称或this放在那里。以下是语言规范中相关引用,以解释此问题(有关详细信息,请参见§5.2):

修改器可以与标识符C(例如private[C])合并,必须表示封装定义的类或包。带有此类修饰符的成员只能从代码内部包C或仅从类C及其伴生模块(§5.4)的代码中访问。

不同形式的资格证书是private[this]。使用此修饰符标记的成员称为对象受保护;只能从定义它的对象内部访问它。也就是说,如果前缀是this或O.this(其中O是引用的包含类),则选择p.M仅在这种情况下是合法的。此外,未限定的私有限制也适用。


3
第一个是私有的实例类,第二个是类级别的。如果你使用第二个版本,你可以从另一个Test类的实例中访问它(这对于equals方法或类似方法非常有用)。

谢谢!你能指点我一下哪里有文档记录这个吗? - pathikrit
请参阅http://www.artima.com/pins1ed/packages-and-imports.html上的“保护范围”部分。 - Denis Makarenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接