假设我拥有以下内容:
def A = "abc"
def X = "xyz"
如何创建一个Map
,其中,除了def map = [A:1, X:2]
我得到的是写作等效的结果
def map = [abc:1, xyz:2]
但是可以使用变量A
和X
作为键吗?
附:对于映射的值部分,同样的问题。
假设我拥有以下内容:
def A = "abc"
def X = "xyz"
如何创建一个Map
,其中,除了def map = [A:1, X:2]
我得到的是写作等效的结果
def map = [abc:1, xyz:2]
但是可以使用变量A
和X
作为键吗?
附:对于映射的值部分,同样的问题。
def map = [(A):1, (X):2]
对于值的部分,更容易一些,因为没有自动将文本转换为字符串的魔法发生:
def map = [keyA:A, keyX:X]
参考Joachim 的回答,如果您想要向现有地图添加条目,并且键是变量,请使用:
def map = [:]
def A = 'abc'
map[A] = 2
如果您使用:
map.A = 2
假设你想使用字面字符串'A'作为键(尽管在作用域中有名为A的变量)。
正如@tim_yates在评论中指出的那样,如果你使用以下方式,键变量也将被解析:
map."$A" = 2
虽然我个人更喜欢使用[A]
语法,因为重构工具可能会错过对变量重命名后"$A"
的引用。
map."$A"
语法使您可以通过map?."$A"
实现空安全的地图导航,而使用map[A]
语法是无法做到这一点的。 - Ghiromap."$A" = 2
在 Jenkins 流水线中运行良好。 map.A
不起作用。 - Dziki_Jam
[(A):1, (X):2]
时,变量被转义为字符串。而使用["$A":1, (X):2]
时,"$A"
是一个插值字符串,结果为GString。Map期望键是不可变的,而GString无法提供这一点。 - Josh Lyon