Ответы:
Использовать это:
def map = [(A):1, (X):2]
Для части значения это еще проще, так как не происходит автоматического «преобразования текста в строку»:
def map = [keyA:A, keyX:X]
Map keys are strings by default: [a:1] is equivalent to ['a':1]. This can be confusing if you define a variable named a and that you want the value of to be the key in your map. If this is the case, then you must escape >the key by adding parenthesis..
[(A):1, (X):2]
, переменная экранируется в строку. С ["$A":1, (X):2]
, "$A"
это интерполированная строка, которая приводит к GString. Карты ожидают, что ключи будут неизменяемыми, чего не предоставляет GString.
В дополнение к ответу Иоахима , если вы хотите добавить записи на существующую карту, а ключи являются переменными, используйте:
def map = [:]
def A = 'abc'
map[A] = 2
Если вы используете:
map.A = 2
Предполагается, что вы хотите использовать буквальную строку 'A' в качестве ключа (даже если в области видимости есть переменная с именем A.
Как отметил @tim_yates в комментарии, ключевая переменная также будет разрешена, если вы используете:
map."$A" = 2
хотя лично я предпочитаю использовать [A]
синтаксис, потому что инструменты рефакторинга могут пропустить "$A"
ссылку, если переменная будет переименована
map."$A"
синтаксис дает вам преимущество нулевой безопасной карты навигации с map?."$A"
, что AFAIK вы не можете достичь с помощью map[A]
синтаксиса
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.