Многократное присвоение с использованием значения 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()

Ваш первый пример - лучший способ сделать это в настоящее время.

Другие вопросы по тегам