Powiedzmy, że tak
def A = "abc"
def X = "xyz"
jak utworzyć Map
gdzie zamiast
def map = [A:1, X:2]
Zamiast tego dostaję odpowiednik pisania
def map = [abc:1, xyz:2]
ale czy można użyć zmiennych A
i X
klucza?
PS: To samo pytanie dla wartościowej części mapy.
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]
przypadku zmiennej zmienna jest zapisywana w łańcuchu. W["$A":1, (X):2]
przypadku"$A"
jest to interpolowany ciąg znaków, którego wynikiem jest ciąg GString. Mapy oczekują, że klucze będą niezmienne, czego nie zapewnia GString.W nawiązaniu do odpowiedzi Joachima , jeśli chcesz dodać wpisy do istniejącej mapy, a klucze są zmiennymi, użyj:
Jeśli użyjesz:
Zakłada się, że chcesz użyć literału „A” jako klucza (nawet jeśli w zasięgu znajduje się zmienna o nazwie A.
Aktualizacja
Jak @tim_yates wskazał w komentarzu, kluczowa zmienna zostanie również rozwiązana, jeśli użyjesz:
chociaż osobiście wolę używać
[A]
składni, ponieważ narzędzia refaktoryzujące mogą przeoczyć"$A"
odniesienie, jeśli zmieniona zostanie nazwa zmiennejźródło
map."$A"
składnia daje korzyści z zerowej bezpiecznej nawigacji z mapymap?."$A"
, która AFAIK nie można osiągnąć za pomocąmap[A]
składni