Scala变量范围问题

时间:2011-05-23 16:09:53

标签: scala

我有一个scala语法问题 - 比如我有一个简单的依赖模式结构,如下所示

trait Master {
  val foobar

  object SubObject extends SubObject {
      foobar = foobar
  }
}

trait SubObject {
  val foobar
}

显然,这不会编译,因为参考     foob​​ar = foobar 很暧昧。

如何指定表达式的RHS应该引用Master的foobar变量?是否有一些我应该知道的“这个”或“自我”的特殊用法?

2 个答案:

答案 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
}