Відповіді:
Використовуй це:
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.