Отличное множественное присвоение с картой

#groovy #variable-assignment

#отличное #переменная-присвоение

Вопрос:

У меня возникла проблема с выполнением инструкции множественного присваивания для значений на карте.

 def map = [a:1,b:2]
(map.a, map.b) = [3,4]
  

это приводит к возникновению исключения:

 expecting ')', found ',' at line: 2, column: 7
  

Тем не менее, это работает нормально:

 def a = 1
def b = 2
(a, b) = [3,4]
  

Ответ №1:

На самом деле, вы можете сделать это, если будете хитрить и использовать .with :

 Map map = [a: 1, b:2]

map.with {
    (a, b) = [3, 4]
}

assert map.a == 3
assert map.b == 4
  

Комментарии:

1. Вау, это отличный обходной путь. Это сработает, Игорь!

Ответ №2:

Это не поддерживается.

http://groovy.codehaus.org/Multiple Assignment

 currently only simple variables may be the target of multiple assignment expressions, e.g.if you have a person class with firstname and lastname fields, you can't currently do this:

(p.firstname, p.lastname) = "My name".split()