如果我有以下代码:
trait MyTrait {
val x: Int
}
def f(_x: Int) = new MyTrait {
val x = _x
}
如果我按如下方式定义我的功能:
def f(x: Int) = new MyTrait {
val x = x
}
这是不正确的,因为val x只是指自己。有没有办法可以避免为' x'使用不同的名称?当我想引用外部范围内的东西时?
答案 0 :(得分:3)
不是真的:在MyTrait
的范围内,x
指的是该字段。但是,您可以选择在输入该范围之前将参数包装为其他名称:
def f(x: Int) = {
val xn = x
new MyTrait {
val x = xn
}
}
答案 1 :(得分:2)
您可以,但前提是外部范围x
是封闭类型的成员,而不是方法参数或局部变量:
class MyOuter(val x: Int) {
def f() = new MyTrait {
val x = MyOuter.this.x
}
答案 2 :(得分:0)
嗯,在这种特殊情况下,你可以这样写:
def f(x: Int) = {
class Foo(val x: Int = x) extends MyTrait
new Foo
}
不确定仅仅将x
重命名为y
会更好...