Я некоторое время копался в этой проблеме и собирался спросить то же самое. Учитывая, что метод, вызываемый при использовании перегруженного оператора '=', это putAt (int, Object), более подробно рассмотрим код GPathResult :
public void putAt(final int index, final Object newValue) {
final GPathResult result = (GPathResult)getAt(index);
if (newValue instanceof Closure) {
result.replaceNode((Closure)newValue);
} else {
result.replaceBody(newValue);
}
}
показывает, что replaceBody должен быть вызван. Как указывает * tim_yates *, replaceBody работает хорошо, поэтому кажется, что вместо него вызывается replaceNode (я не понимаю, почему). Копаясь в NodeChildren's replaceNode , мы можем видеть, что
protected void replaceNode(final Closure newValue) {
final Iterator iter = iterator();
while (iter.hasNext()) {
final NodeChild result = (NodeChild) iter.next();
result.replaceNode(newValue);
}
}
замыкание никогда не вызывается, поэтому ничего не делается, когда вызывается replaceNode. Поэтому я думаю, что в replaceNode есть ошибка (она ничего не делает), и при выполнении xml."con:cred"."ser:user" = "modified_username"
правая часть выражения оценивается как Closure (мне нужна помощь в этом вопросе, чтобы понять, почему: -).