【发布时间】:2013-01-17 20:02:03
【问题描述】:
我想帮助理解 Groovy 在函数之间传递时如何管理范围和变量。假设我在 main 方法中声明 def foo 并将其作为参数传递给私有 void 方法 changeStuff。然后我可以进行如下更改:
public static void main(args) {
def foo = [:];
changeStuff(foo);
println(foo);
}
private static void changeStuff(foo) {
foo.bar = "new stuff";
}
打印的结果是[bar:new stuff] 但我很难以其他方式操纵 foo。请参阅以下两个示例:
public static void main(args) {
def foo = [:];
changeStuff(foo);
println(foo);
}
private static void changeStuff(foo) {
def newStuff = [:]
newStuff.extra = "extra stuff";
foo = newStuff;
}
打印:[:]
public static void main(args) {
def foo = "before";
changeStuff(foo);
println(foo);
}
private static void changeStuff(foo) {
foo = "after";
}
打印before
我知道这里有一些我不完全理解的概念,可能与def有关?任何关于我可以在哪里了解更多信息的总结或指导表示赞赏。
【问题讨论】:
-
Groovy 的行为类似于 java。见stackoverflow.com/questions/40480/is-java-pass-by-reference
标签: java groovy scope variable-assignment