Groovy - GString用作键,而String用作键,下标符号与put方法

时间:2017-02-01 23:17:07

标签: groovy gstring

groovy documentation中,它提到使用GString作为密钥是不好的:

<span style="color: red" data-bind="if: isUpdated">The list was updated!</span>

但是,只需将put()方法更改为使用下标表示法:

def key = 'some key'
def map = [:]
def gstringKey = "${key.toUpperCase()}"
map.put(gstringKey,'value')
assert map.get('SOME KEY') == null

足以导致断言失败。使用[]和put()方法之间的语义有何不同?下标符号是否有某种隐式转换为String?

1 个答案:

答案 0 :(得分:2)

下标符号是否隐式转换为String?

基本上,是的。

语句a[b] = c等同于根据Groovy operator overloading规则调用a.putAt(b, c)方法。

putAt method的特定签名是void putAt(String property, Object newValue),这意味着如果b是Groovy字符串,它将首先使用其toString()方法转换为字符串

最终,putAt方法会使用Map.put值作为密钥来调用String