说我有一个属性为a
的特征:
trait TheTrait {
def a: String
}
我有一个属性为a
的类,我想匿名实例化该特性:
class TheClass {
val a = "abc"
val traitInstance = new TheTrait {
def a = a // I want to assign it to the `a` of TheClass here
// but this way it doesn't work
}
}
我怎样才能做到这一点?
答案 0 :(得分:22)
TheClass.this.a
,或在this
中为TheClass
提供别名(称之为self
是习惯的)
class TheClass { self =>
val a = "abc"
val traitInstance = new TheTrait {
def a = self.a
}
}
答案 1 :(得分:1)
如果外部vals / vars位于功能块内,则解决问题的方法是将它们包装在匿名类中,为它们指定一个特定的名称。 S.A。
val a=1
val c = new { val a=a } // does not compile
val s = new { val a=1 }
val c = new { val a=s.a } // compiles :)
当然也只是使用不同的名称可以解决问题,但有些情况下,这意味着使用_ $等前缀/后缀。这是那些替代。