Respostas:
Usa isto:
def map = [(A):1, (X):2]
Para a parte do valor é ainda mais fácil, já que não há nenhuma magia automática "converter texto em string" acontecendo:
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]
, a variável está sendo escapada em uma String. Com ["$A":1, (X):2]
, "$A"
é uma string interpolada que resulta em um GString. Os mapas esperam que as chaves sejam imutáveis, o que um GString não fornece.
Na sequência da resposta de Joachim , se você quiser adicionar entradas a um mapa existente e as chaves são variáveis, use:
def map = [:]
def A = 'abc'
map[A] = 2
Se você usar:
map.A = 2
Presume-se que você deseja usar a string literal 'A' como a chave (embora haja uma variável chamada A no escopo.
Como @tim_yates apontou em um comentário, uma variável-chave também será resolvida se você usar:
map."$A" = 2
embora pessoalmente eu prefira usar a [A]
sintaxe porque as ferramentas de refatoração podem perder a "$A"
referência se a variável for renomeada
map."$A"
sintaxe oferece o benefício de navegação nula segura no mapa map?."$A"
, que AFAIK você não pode alcançar usando a map[A]
sintaxe
To use the value of a String as the key value of a map, simply surround the variable with parenthesis.