2012-12-31 63 views
2

我目前正在寻找如何在Scala中处理协变和逆变类型参数化。还有一个特殊情况,var字段必须是private [this]才能编译。从例如在此代码段(摄于这样一个问题:private[this] vs private):如何从另一个对象实例访问私有字段?

class Holder[+T] (initialValue: Option[T]) { 
    // without [this] it will not compile 
    private[this] var value = initialValue 

    def getValue = value 
    def makeEmpty { value = None } 
} 

我理解这个例子。但是我无法理解的是,在什么情况下可以从另一个实例访问私有字段,而不是itselt(this)?

感谢您的帮助。

回答

5

如果一个成员是纯私人的,它可以从同一个类的其他实例访问。后缀[this]仅对包含它的实例可见。

+0

你能举一个例子说明同一个类的另一个实例如何访问一个普通私有成员?我仍然没有得到它...... – Alain

+1

它们在执行'equals'时很常见。假设你要在你的Holder类中实现equals。一个常用的方法是做'def equals(that:Holder [T])=(value == that.value)'。这个代码只在'value'被设置为plain-private时编译,因为你从'this'实例访问'that.value'(注意这不是正确的'Object.equals'签名,为了更好的理解它被简化了)。 –

+0

谢谢,现在我明白了! – Alain

相关问题