Groovy-GString用作键,String用作键,下标表示法用作put方法
在中,它提到使用GString作为密钥是不好的:Groovy-GString用作键,String用作键,下标表示法用作put方法,groovy,gstring,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.to
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()方法的语义有什么不同?下标符号是否有某种对字符串的隐式转换?下标符号是否有对字符串的隐式转换
基本上,是的
根据Groovy规则,语句a[b]=c
相当于调用a.putAt(b,c)
方法
的特定签名是void putAt(String属性,Object newValue)
,这意味着如果b
是一个Groovy字符串,那么它将首先使用其toString()
方法转换为一个字符串
最后,
putAt
方法将使用String
值作为键调用Map.put
。我不理解使用GString
作为带有下标符号的映射键的问题。转换为字符串
可能是人们想要的。Groovy文档应该警告不要使用Map
的get
和put
方法。