Многократное присвоение с использованием значения Map вместо переменной с Groovy
В Groovy у меня есть функция, которая возвращает тройку. Я бы хотел:
- положить первое значение, возвращаемое в
Map
для произвольного ключа и - назначьте два других значения переменным.
Я могу сделать:
Map m = [:]
(day, month, year) = "12 February 2014".split(" ");
m["day"] = day;
Но я хотел бы избавиться от переменной day
, как это:
Map m = [:]
(m["day"], month, year) = "12 February 2014".split(" ");
По какой-то причине это кажется невозможным. Вот что предупреждает меня компилятор:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/web/com/139223923319646/main.groovy: 2: expecting ')', found ',' @ line 2, column 10.
(m["day"], month, year) = "12 February 2014".split(" ");
^
Ребята, сможете ли вы мне помочь или объяснить, почему этот синтаксис не может быть использован?
2 ответа
Решение
Вы можете сделать это:
def dstr = "12 February 2014"
def m = [['day', 'month', 'year'], dstr.split( " " )].transpose()
.collectEntries()
Получить
assert m == [ day:'12', month:'February', year:'2014' ]
Но я не уверен, что ты этого хочешь...
К сожалению, это невозможно, согласно документации Groovy для нескольких заданий.
В настоящее время только простые переменные могут быть целью нескольких выражений присваивания, например, если у вас есть класс person с полями имени и фамилии, вы не можете сделать это в настоящее время:
(p.firstname, p.lastname) = "My name".split()
Ваш первый пример - лучший способ сделать это в настоящее время.