Scala变量作用域问题

发布于 2024-11-09 09:16:44 字数 317 浏览 0 评论 0原文

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

trait Master {
  val foobar

  object SubObject extends SubObject {
      foobar = foobar
  }
}

trait SubObject {
  val foobar
}

显然,这不会编译,因为引用 富巴 = 富巴 是模棱两可的。

如何指定表达式的 RHS 应引用 Master 的 foobar 变量?我应该了解“this”或“self”的某种特殊用法吗?

I have a scala syntax question - say I have a simple dependency pattern construct like the following

trait Master {
  val foobar

  object SubObject extends SubObject {
      foobar = foobar
  }
}

trait SubObject {
  val foobar
}

Obviously, this will not compile, since the reference
foobar = foobar
is ambiguous.

How do I specify that the RHS of the expression should reference Master's foobar variable? Is there some sort of special usage of 'this' or 'self' that I should know about?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

征棹 2024-11-16 09:16:44

您可以使用 Master.this 限定符来专门引用外部作用域,如下所示:

trait Master {
  val foobar = "Hello world"

  object SubObject extends SubObject {
      val foobar = Master.this.foobar
  }
}

trait SubObject {
  val foobar:String
}

You can use the Master.this qualifier to specifically reference the outer scope, something like the following:

trait Master {
  val foobar = "Hello world"

  object SubObject extends SubObject {
      val foobar = Master.this.foobar
  }
}

trait SubObject {
  val foobar:String
}
尘曦 2024-11-16 09:16:44

我相信最简单的方法是使用自我类型定义。除了一堆很酷的类型理论效果之外,您还可以使用自我类型为“this”创建别名。 (没有测试过这个)

trait Master {
  master =>
  val foobar

  object SubObject extends SubObject {
      foobar = master.foobar
  }
}

trait SubObject {
  val foobar
}

I believe the easiest way is to use a self-type definition. In addition to a bunch of cool type-theoretic effects, you can use a self-type to create an alias for "this". (Haven't tested this)

trait Master {
  master =>
  val foobar

  object SubObject extends SubObject {
      foobar = master.foobar
  }
}

trait SubObject {
  val foobar
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文