Groovy - GString 用作键与字符串作为键,下标表示法与放置方法



在时髦的文档中,它提到使用GString作为密钥是不好的:

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

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

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

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

下标表示法是否隐式强制转换为字符串?

基本上,是的。

语句 a[b] = c 等效于根据 Groovy 运算符重载规则调用 a.putAt(b, c) 方法。

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

最终,putAt 方法将使用 String 值作为键调用Map.put

相关内容

  • 没有找到相关文章