我正在编写代码,发现在处理 XML 和 Maps 时,Groovy 的行为有些奇怪。我思考了一下,但是无法弄清为什么会发生这种情况,也不确定是否应该这样。
我编写了三个示例代码。map1 和 map3 之间的关键区别仅在以下部分:
Map1:
map1 << ["${it.name()}":it.value()]
Map3:
map3["${it.name()}"]=it.value()
这是完整的代码,您可以将其复制粘贴到Groovy控制台中:
def xml = '<xml><head>headHere</head><body>bodyHere</body></xml>'
Map map1 = [:]
def node = new XmlParser().parseText(xml)
node.each {
map1 << ["${it.name()}": it.value()]
}
println map1
println map1["head"]
println ">>>>>>>>>>>>>>>>>>>>>>"
Map map2 = [:]
map2 << ["head":"headHere"]
map2 << ["body":"bodyHere"]
println map2
println map2["head"]
println "<<<<<<<<<<<<<<<<<<<<<<"
def xml2 = '<xml><head>headHere</head><body>bodyHere</body></xml>'
Map map3 = [:]
def node2 = new XmlParser().parseText(xml2)
node2.each {
map3["${it.name()}"]=it.value()
}
println map3
println map3["head"]
我得到的结果如下:
我得到的结果如下:
[head:[headHere], body:[bodyHere]]
null
[head:headHere, body:bodyHere]
headHere
[head:[headHere], body:[bodyHere]]
[headHere]
尽管map1和map3看起来相同,但map["head"]的结果完全不同,第一个返回null,而第二个返回实际结果。我不明白为什么会这样。我花了一些时间研究它,但还是不理解。我使用.getProperty()获取类的信息,但在map和对象内部看起来都是相同的。我尝试了其他几件事情,但没有任何思路。我甚至尝试了不同的操作系统(Win XP、Mac OS),但还是没有任何进展。
我已经没有任何想法了,请问有人能解释这种奇怪的行为吗?为什么会发生这种情况?map << [key:object]和map[key] = object之间有什么区别?
谢谢。