Disons que j'ai
def A = "abc"
def X = "xyz"
comment créer un Map
où, au lieu de
def map = [A:1, X:2]
J'obtiens à la place l'équivalent de l'écriture
def map = [abc:1, xyz:2]
mais peut utiliser des variables A
et X
pour la clé?
PS: Même question pour la partie valeur de la carte.
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]
, 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:
Si tu utilises:
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.
Mettre à jour
Comme @tim_yates l'a souligné dans un commentaire, une variable clé sera également résolue si vous utilisez:
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éela source
map."$A"
syntaxe vous donne l'avantage de la navigation nulle sur la carte avecmap?."$A"
, ce que vous ne pouvez pas réalisermap[A]