Respuestas:
Utilizar este:
def map = [(A):1, (X):2]
Para la parte de valor, es aún más fácil, ya que no se produce una conversión automática de texto a cadena:
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 se escapa a una cadena. Con ["$A":1, (X):2]
, "$A"
es una cadena interpolada que da como resultado una GString. Los mapas esperan que las claves sean inmutables, lo que no proporciona un GString.
Además de la respuesta de Joachim , si desea agregar entradas a un mapa existente y las claves son variables, use:
def map = [:]
def A = 'abc'
map[A] = 2
Si utiliza:
map.A = 2
Se supone que desea utilizar la cadena literal 'A' como clave (aunque hay una variable denominada A en el alcance.
Como @tim_yates señaló en un comentario, una variable clave también se resolverá si usa:
map."$A" = 2
aunque personalmente prefiero usar la [A]
sintaxis porque las herramientas de refactorización pueden perder la "$A"
referencia si se cambia el nombre de la variable
map."$A"
sintaxis le brinda el beneficio de una navegación de mapa segura y nula con map?."$A"
, que AFAIK no puede lograr usando la map[A]
sintaxis
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.