【问题标题】:Private scoping with square brackets (private[...]) in ScalaScala中带方括号的私有范围(私有[...])
【发布时间】:2013-01-20 07:50:41
【问题描述】:

我在查看 Gatling 源代码时遇到了以下语法:

private[http] def build = {
  // ...
}

方括号里面的语法是什么?

当我在 IDE 中单击它时,它是完全限定包 (com.excilys.ebi.gatling.http) 的别名,但我找不到该别名的定义位置。

【问题讨论】:

标签: scala syntax scope


【解决方案1】:

请参阅the scala reference,特别是第 5.2 章。部分摘录:

私有修饰符可以与模板中的任何定义或声明一起使用。此类成员只能从直接封闭的模板及其伴随模块或伴随类(第 5.4 节)中访问。他们是 不被子类继承,它们可能不会覆盖父类中的定义 类。

修饰符可以使用标识符 C(例如 private[C]) 来限定,该标识符必须 表示包含定义的类或包。成员标记为 这样的修饰符分别只能从包 C 内的代码或只能从类 C 及其配套模块(第 5.4 节)内的代码访问。 此类成员也只能从 C 中的模板继承。

【讨论】:

  • 简而言之:private[http] 使其对 com.excilys.ebi.gatling.http 成为私有,而 private[gatling] 将使其对 com.excilys.ebi.gatling 成为私有。我们将它们设为私有,因此它们不会出现在 IDE 自动完成中。
【解决方案2】:

简而言之:这用于范围保护

  • private[C] 表示访问是私有的“直到”C,其中 C 是 相应的包、类或单例对象。

与受保护的[C]相同

  • protected[C]:访问受保护“最高”C,其中 C 是 相应的包、类或单例对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2015-03-30
    • 2016-10-12
    • 1970-01-01
    • 2015-12-14
    • 2010-09-10
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多