我想提出以下工作:
def foo(x:Int = 1) = {
object obj {
val x = foo.this.x
}
}
但我不知道如何从对象中引用X。 可以这样没有在这两个地点之一重命名X做了什么?
重命名变量时,例如,可能不容易foo
是其中x为命名变量一种广泛使用的API的功能,同时obj
延伸,其具有一个第三方性状x
作为一个抽象的构件。
我想提出以下工作:
def foo(x:Int = 1) = {
object obj {
val x = foo.this.x
}
}
但我不知道如何从对象中引用X。 可以这样没有在这两个地点之一重命名X做了什么?
重命名变量时,例如,可能不容易foo
是其中x为命名变量一种广泛使用的API的功能,同时obj
延伸,其具有一个第三方性状x
作为一个抽象的构件。
为什么不引入具有相同的值作为新的变量foo
的说法x
,但没有阴影?
def foo(x: Int): Unit = {
val foo_x = x
object obj {
val x = 13
def doStuff: Unit = printf("%d %d\n", x, foo_x);
}
obj.doStuff
}
foo(42)
不,这是不可能的。 有没有办法找出函数定义的外块。
对于你的语法工作FOO将不得不与一个成员谢这个工程的对象:
class foo{
val x = 1
object obj {
val x = foo.this.x
}
}
foo
也可能是延长FunctionX一个单独的对象,这让你非常相似的方法什么的。 但它可能是更容易只是重命名值之一。
这是不可能在Scala中。
你写的代码,所以最简单的选项将重命名的一个x
S和问题就解决了。
但是,如果由于某种原因,你真的需要它-你可以做一招,并创建一个object
会表现得像你的方法
object Foo {
self =>
val x = 1
def apply() = {
object obj {
val x1 = self.x
val x2 = Foo.x
// x1 == x2, just 2 different ways of doing this
}
}
}
由于apply
方法的实现,你可以使用它,就像使用一个功能Foo()