Dictionary 具有变量属性和字符串插值的Groovy映射问题
很长一段时间以来,我一直在很好地导航地图结构。然而,出于某种原因,这个问题的根源我没有意识到。我也试过括号符号,运气不好 为什么最终输出(null)不返回“[serverinfo:[listenPort:19001]” 如果我用简单的“服务”替换“$instanceName”的两个实例,它就会工作Dictionary 具有变量属性和字符串插值的Groovy映射问题,dictionary,groovy,interpolation,Dictionary,Groovy,Interpolation,很长一段时间以来,我一直在很好地导航地图结构。然而,出于某种原因,这个问题的根源我没有意识到。我也试过括号符号,运气不好 为什么最终输出(null)不返回“[serverinfo:[listenPort:19001]” 如果我用简单的“服务”替换“$instanceName”的两个实例,它就会工作 String instanceName = "Services" Map serverNode = [ instances:[ "$instanceName":[
String instanceName = "Services"
Map serverNode = [
instances:[
"$instanceName":[
serverinfo:[
listenPort:19001
]
]
]
]
println "$instanceName"
println serverNode.instances
println serverNode.instances."$instanceName"
//output
Services
[Services:[serverinfo:[listenPort:19001]]]
null
“$instanceName”
的类型是GStringImpl
,而不是String
。这是一个常见的错误(而且很难找到!)
正如@tim_yates在comment中所述,如果插入的字符串像本例中一样简单(即“${property}”),那么可以使用
(property)
语法:Groovy将属性的值作为键,而不是单词“property”或(instanceName):[
是的,你是对的,这比我的回答要好得多:-)我的回答更严格,因为这个关于地图中gstring的问题(但结果是..丑陋)完全同意,他们提到了插值,所以我猜他们的实际代码更复杂;-)非常感谢,这大大提高了我处理地图的能力,并回答了一个特别令人沮丧的小细节。
def serverNode = [
instances:[
("$instanceName" as String):[
serverinfo:[
listenPort:19001
]
]
]
]