public updateList(lst) { lst += "a" } List lst = [] updateList(lst) println(lst)
这会打印一个空列表.然而;
public updateList(lst) { lst.add("a") } List lst = [] updateList(lst) println(lst)
,将根据需要打印“a”.
我总是假设=与.add()相同,但显然不是.我假设=正在创建一个新的List,而.add()只更新了现有的List?
解决方法
第一个方法在lst变量上调用plus
我们可以看到from the documentation这将:
Create a collection as a union of a
Collection and an Object.
因此将返回一个新的集合,原始的lst(在此方法的范围之外)将保持不变. (显然,在这个方法的范围内,lst将是一个包含一个元素的新列表)
这可以通过打印出updateList方法的结果来看出:
public updateList(lst) { lst += "a" // calls plus,creates a new list,and returns this new list. // lst (outside the context of this method) is unmodified } List lst = [] println( updateList(lst) )
如果您拨打add,则拨打standard java add method.
public updateList(lst) { lst.add "a" }
所以原来的lst被修改了
public updateList(lst) { lst << "a" }
public static <T> Collection<T> leftShift(Collection<T> self,T value) { self.add(value); return self; }