Скажем, у меня есть
def A = "abc"
def X = "xyz"
как мне создать Map
где вместо
def map = [A:1, X:2]
Вместо этого я получаю эквивалент письма
def map = [abc:1, xyz:2]
а можно использовать переменные A
и X
для ключа?
PS: Тот же вопрос для ценностной части карты.
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.
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.В дополнение к ответу Иоахима , если вы хотите добавить записи на существующую карту, а ключи являются переменными, используйте:
Если вы используете:
Предполагается, что вы хотите использовать буквальную строку 'A' в качестве ключа (даже если в области видимости есть переменная с именем A.
Обновить
Как отметил @tim_yates в комментарии, ключевая переменная также будет разрешена, если вы используете:
хотя лично я предпочитаю использовать
[A]
синтаксис, потому что инструменты рефакторинга могут пропустить"$A"
ссылку, если переменная будет переименованаисточник
map."$A"
синтаксис дает вам преимущество нулевой безопасной карты навигации сmap?."$A"
, что AFAIK вы не можете достичь с помощьюmap[A]
синтаксиса