Odpowiedzi:
Użyj tego:
def map = [(A):1, (X):2]
W przypadku części zawierającej wartość jest to jeszcze łatwiejsze, ponieważ nie ma automatycznej konwersji tekstu na ciąg znaków:
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]
przypadku zmiennej zmienna jest zapisywana w łańcuchu. W ["$A":1, (X):2]
przypadku "$A"
jest to interpolowany ciąg znaków, którego wynikiem jest ciąg GString. Mapy oczekują, że klucze będą niezmienne, czego nie zapewnia GString.
W nawiązaniu do odpowiedzi Joachima , jeśli chcesz dodać wpisy do istniejącej mapy, a klucze są zmiennymi, użyj:
def map = [:]
def A = 'abc'
map[A] = 2
Jeśli użyjesz:
map.A = 2
Zakłada się, że chcesz użyć literału „A” jako klucza (nawet jeśli w zasięgu znajduje się zmienna o nazwie A.
Jak @tim_yates wskazał w komentarzu, kluczowa zmienna zostanie również rozwiązana, jeśli użyjesz:
map."$A" = 2
chociaż osobiście wolę używać [A]
składni, ponieważ narzędzia refaktoryzujące mogą przeoczyć "$A"
odniesienie, jeśli zmieniona zostanie nazwa zmiennej
map."$A"
składnia daje korzyści z zerowej bezpiecznej nawigacji z mapy map?."$A"
, która AFAIK nie można osiągnąć za pomocą map[A]
składni
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.