Groovy 为什么foreach循环中的HashMap#get()返回null?

Groovy 为什么foreach循环中的HashMap#get()返回null?,groovy,Groovy,对于groovy-v:groovy版本:1.8.6 JVM:1.6.0\u 26供应商:Sun Microsystems Inc.操作系统:Linux: def map = new HashMap() def keyVariable = "a" def valueVariable = "b" map.put("${keyVariable}", valueVariable) for (String key : map.keySet()) { println map.get(key) }

对于
groovy-v
groovy版本:1.8.6 JVM:1.6.0\u 26供应商:Sun Microsystems Inc.操作系统:Linux

def map = new HashMap()
def keyVariable = "a"
def valueVariable = "b"
map.put("${keyVariable}", valueVariable)

for (String key : map.keySet()) {
    println map.get(key)
}

这将打印
null
。有人能解释为什么Groovy找到了键,但不能通过同一个键找到相应的值吗?

问题中的代码没有为我打印
null
(Groovy 2.1.6)

在编辑之后,问题是Groovy模板化的字符串会产生非常糟糕的映射键 更惯用的Groovy应该是:

def map = [:]
def keyVariable = "a"
def valueVariable = "b"
map[ keyVariable ] = valueVariable

map.each { key, value ->
    println value
}

// Or

map.keySet().each { key ->
    println map[ key ]
}

根据我的测试,这不会打印
null
,它对我有效。你的设置是什么?我的是
Groovy版本:2.1.5 JVM:1.8.0-ea供应商:Oracle公司OS:Linux
我怀疑我提出了一个简单的示例来发布到StackOverflow,您已经删除了导致问题的东西;-)对不起大家;我已经修复了代码,所以它会重现我实际遇到的情况。Groovy模板字符串会导致非常糟糕的映射键,因为等式实际上不起作用。。。一种解决方法是
map.put(“${keyVariable}”.toString(),valueVariable)
@william.berg Ahh是的,Groovy模板字符串会产生非常糟糕的映射键:-(