【问题标题】:Scala syntax like private[this]Scala 语法如 private[this]
【发布时间】:2019-09-15 08:39:07
【问题描述】:

我是 scala 的新手,谁能指出下面方括号 [this] 的术语是什么?

private[this] lazy val outputAttributes = AttributeSeq(output)

谢谢。

【问题讨论】:

标签: scala terminology


【解决方案1】:

这叫object-private access modifier

没有限定符的标记为private 的成员称为类私有, 而标记为private[this] 的成员称为对象私有。

并指定most restrictive access

最严格的访问是标记一个方法 作为“对象私有”。执行此操作时,该方法仅适用于 当前对象的当前实例。的其他实例 同一个类不能访问该方法。

更准确地说,private[this] 的一部分[this] 被称为访问限定符

AccessModifier    ::=  (‘private’ | ‘protected’) [AccessQualifier]
AccessQualifier   ::=  ‘[’ (id | ‘this’) ‘]’

【讨论】:

    【解决方案2】:

    private[this] 将隐私更进一步,它使字段对象private。与private 不同,现在该字段不能被相同类型的其他实例访问,这使得它比普通的私有设置更加私密。

    例如,

    class Person {
     private val name = "John"
     def show(p: Person) = p.name
    }
    
    (new Person).show(new Person) // result: John
    
    class Person {
     private[this] val name = "John"
     def show(p: Person) = p.name // compilation error
    }
    

    添加private[this]后,字段只能被当前实例访问,不能被其他任何类实例访问。

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 2021-02-14
      • 2016-08-19
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多