我有一个列表def vrs=["6.0","6.1","6.1.0"]
(版本),我在一个具有此值def test=[version:6.1 HotFix11]
的函数中得到一个映射。
如何检查test
的{{1}}值是否与列表version
匹配?
我试过了vrs
,但它提供了vrs.each{ver-> println test.version.contains(ver)}
更新
事实证明,我的代码有问题。我在一个小的Groovy脚本中尝试了测试用例,它可以工作。
以下是完整代码:
Exception in thread "main" java.lang.StackOverflowError
另一个叫private Map params
private def root
private def nineBelow
XmlHandler(String xml)
{
nineBelow=["6.0","6.1","6.1.0"]
params=[:]
root=new XmlParser().parseText(xml)
}
def getParams()
{
if(root.product.version.size()>0)
{
params.version=root.product.version.text()
}
/*nineBelow.each {
println params.version //even this throws java.lang.StackOverflowError
//println "$it , ${params.version}"
//println ver.getClass()+", "+params.version.getClass()
}*/
println nineBelow.each{ver-> println params.version.contains(ver)}
/*I need to check whether `params.version` matches with `nineBelow` list, so i'll check for condition here*/
params
}
getParams()
更新
即使static main(args) {
String fileContents = new File('E://Projects/agent6.1.xml').text
XmlHandler xm=new XmlHandler(fileContents)
def params=xm.getParams()
println params
}
给了我println nineBelow.each { println params.version}
更新
仅在以下代码
之后才有效Exception in thread "main" java.lang.StackOverflowError
这里有什么问题?
答案 0 :(得分:3)
您是否有一个示例失败了一些示例xml?我问,因为这(你在问题的顶部说崩溃)确实有效:
def vrs=["6.0","6.1","6.1.0"]
def test=[ version:'6.1 HotFix11' ]
vrs.each { ver-> println test.version.contains( ver ) }
并打印:
false
true
false
但是我发现你的其他代码没有问题,因为我不知道'E://Projects/agent6.1.xml'
包含什么......
答案 1 :(得分:1)
我猜您的代码如下:
class XmlHandler {
private Map params
private def root
private def nineBelow
XmlHandler(String xml)
{
nineBelow=["6.0","6.1","6.1.0"]
params=[:]
root=new XmlParser().parseText(xml)
}
def getParams()
{
if(root.product.version.size()>0)
{
params.version=root.product.version.text()
}
nineBelow.each {
println params.version //even this throws java.lang.StackOverflowError
//println "$it , ${params.version}"
//println ver.getClass()+", "+params.version.getClass()
}
}
}
def doc = """
<root>
<product>
<version>1.0</version>
<version>2.0</version>
<version>3.0</version>
<version>4.0</version>
<version>5.0</version>
</product>
</root>
"""
XmlHandler handler = new XmlHandler(doc)
handler.getParams()
因此,在println params.version
中,您实际上正在调用getParams().version
,从而进入无休止的递归调用。
检查Groovy @ symbol before fields。正如 tim_yates 那样,¿bug或功能?