我想幫助理解Groovy在函數之間傳遞時如何管理範圍和變量。假設我在主要方法中聲明def foo
並將其作爲參數傳遞給private void method,changeStuff。Groovy範圍,賦值和變量引用
public static void main(args) {
def foo = [:];
changeStuff(foo);
println(foo);
}
private static void changeStuff(foo) {
foo.bar = "new stuff";
}
打印的結果是[bar:new stuff]
但我有一個很難用其他方式操縱富:然後我就可以像如下修改。看到這下面兩個例子:
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。見http://stackoverflow.com/questions/40480/is-java-pass-by-reference –
好文章,謝謝 –