3

这对我来说是一个常见的烦恼:

trait Foo {
    val x: Int
}

def foo(x: Int) = new Foo {
    val x = x // <-- Here
}

在编写 Scala 代码时,我大概每 20 分钟就会遇到一次。

我知道的解决方案及其各自的缺陷是:

  • 将本地声明包含在一个可以命名的对象中——不适用于参数。
  • 如果您需要保留路径相关类型,请创建别名 - 详细。
  • 使用代理构造函数——在存在依赖类型字段时很麻烦。

还有其他人吗?

4

2 回答 2

2

我有时会使用这种俗气的方法:

def foo(x: Int): Foo = {
  val x1 = x
  new Foo {
    val x = x1
  }
}
于 2013-10-21T19:18:56.173 回答
1

这个怎么样?

trait Foo {
    val x: Int
}

object Foo {
    def apply(xt: Int) = new Foo { val x = xt }
}

def foo(xt: Int) = Foo(xt) // <-- Here
于 2013-10-21T07:28:31.610 回答