Risposte:
Usa questo:
def map = [(A):1, (X):2]
Per la parte relativa al valore è ancora più semplice, dal momento che non avviene alcun "converti testo in stringa" automagic:
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]
, la variabile viene sottoposta a escape in una String. Con ["$A":1, (X):2]
, "$A"
è una stringa interpolata che risulta in un GString. Le mappe si aspettano che le chiavi siano immutabili che un GString non fornisce.
Oltre alla risposta di Joachim , se vuoi aggiungere voci a una mappa esistente e le chiavi sono variabili, usa:
def map = [:]
def A = 'abc'
map[A] = 2
Se utilizzi:
map.A = 2
Si presume che si desideri utilizzare la stringa letterale "A" come chiave (anche se è presente una variabile denominata A nell'ambito.
Come ha sottolineato @tim_yates in un commento, anche una variabile chiave verrà risolta se si utilizza:
map."$A" = 2
anche se personalmente preferisco usare la [A]
sintassi perché gli strumenti di refactoring potrebbero perdere il "$A"
riferimento se la variabile viene rinominata
map."$A"
sintassi ti offre il vantaggio di una navigazione cartografica nulla sicura con map?."$A"
, che AFAIK non puoi ottenere usando la map[A]
sintassi
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.