请解释一下,为什么这不起作用(JDK7上的Groovy 2.0.5)。我只想从列表中添加一些映射条目。
def map = new HashMap<String,String>()
map << ["key":"value"]
def list = ["a","b","c"]
list.each {
map << [it:"value"]
}
println map
println map.a
println map.containsKey("a")
/*
[key:value, a:value, b:value, c:value]
null <- ?
false <- ?
*/
它也无法使用:
map << ["$it":"value"]
但它正在使用:
map << [(""+it):"value"]
???
答案 0 :(得分:14)
此
map << [it:"value"]
只需使用名为it
的密钥即可。如果你用括号括起来:
map << [(it):"value"]
它按你想要的方式工作......
如果你这样做:
map << ["$it":"value"]
然后,您可以看到GStringImpl
:作为关键而不是java.lang.String
println map.keySet()*.getClass().name
// prints [GStringImpl, GStringImpl, String, GStringImpl ]
(为简洁省略了包名称)
然后,您尝试使用String查找GString键,这会失败(请参阅'GStrings不是字符串'部分on this page)
这有效:
map << [(""+it):"value"]
因为它只是创建一个String(通过将it
附加到空字符串)
无论如何......长话短说,请使用[(it):'value']