Réponses:
Utilisez ceci:
def map = [(A):1, (X):2]
Pour la partie valeur, c'est encore plus facile, car il n'y a pas de "conversion de texte en chaîne" automatique:
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 variable est échappée dans une chaîne. Avec ["$A":1, (X):2]
, le "$A"
est une chaîne interpolée qui donne une GString. Les cartes s'attendent à ce que les clés soient immuables, ce qu'une GString ne fournit pas.
Suite à la réponse de Joachim , si vous souhaitez ajouter des entrées à une carte existante et que les clés sont des variables, utilisez:
def map = [:]
def A = 'abc'
map[A] = 2
Si tu utilises:
map.A = 2
On suppose que vous souhaitez utiliser la chaîne littérale «A» comme clé (même s'il existe une variable nommée A dans la portée.
Comme @tim_yates l'a souligné dans un commentaire, une variable clé sera également résolue si vous utilisez:
map."$A" = 2
bien que personnellement je préfère utiliser la [A]
syntaxe car les outils de refactoring peuvent manquer la "$A"
référence si la variable est renommée
map."$A"
syntaxe vous donne l'avantage de la navigation nulle sur la carte avec map?."$A"
, ce que vous ne pouvez pas réaliser map[A]
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.