Первый метод вызывает plus
для переменной lst
Как мы видим из документации это будет:
Создать коллекцию как объединение
Коллекция и предмет.
Таким образом, будет возвращена новая коллекция, а исходная 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
, то вы вызываете стандартный метод добавления Java .
public updateList(lst) {
lst.add "a"
}
Итак, оригинал lst
модифицирован
Альтернативой add
будет использование оператора leftShift
:
public updateList(lst) {
lst << "a"
}
Какие вызовы добавить за кулисами: (код из исходного кода Groovy)
public static <T> Collection<T> leftShift(Collection<T> self, T value) {
self.add(value);
return self;
}