我有一个scala语法问题 - 比如我有一个简单的依赖模式结构,如下所示
trait Master {
val foobar
object SubObject extends SubObject {
foobar = foobar
}
}
trait SubObject {
val foobar
}
显然,这不会编译,因为参考 foobar = foobar 很暧昧。
如何指定表达式的RHS应该引用Master的foobar变量?是否有一些我应该知道的“这个”或“自我”的特殊用法?
答案 0 :(得分:6)
您可以使用Master.this
限定符来专门引用外部范围,如下所示:
trait Master {
val foobar = "Hello world"
object SubObject extends SubObject {
val foobar = Master.this.foobar
}
}
trait SubObject {
val foobar:String
}
答案 1 :(得分:5)
我认为最简单的方法是使用自定义类型。除了一堆很酷的类型理论效果之外,您还可以使用自我类型为“this”创建别名。 (尚未对此进行测试)
trait Master {
master =>
val foobar
object SubObject extends SubObject {
foobar = master.foobar
}
}
trait SubObject {
val foobar
}