我偶然发现了find函数的这种奇怪行为。
如果我使用"发现"要在整数数组中找到0,即使数组中有0,它也会返回null。如果我尝试使用" findall"或者像2这样的其他值,它按预期工作。
我删除了原始代码以生成此代码段以重现行为:
id = 0
class Node {
int id = 1
Set Nlinks = [0]
}
b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }}
b2 = [new Node()].find{it.Nlinks.findAll{it2 -> it2 == id }}
println(b1?.id + " " + b2?.id) // Output: null 1
id2 = 2
class Node2 {
int id = 1
Set Nlinks = [2]
}
b3 = [new Node2()].find{it.Nlinks.find{it2 -> it2 == id2 }}
b4 = [new Node2()].find{it.Nlinks.findAll{it2 -> it2 == id2 }}
println(b3?.id + " " + b4?.id) // Output: 1 1
这种行为是否是预期的,我错过了为什么这应该是它的行为方式,或者这是一个错误?
答案 0 :(得分:0)
b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }}
[0].find{it==0}
(嵌套查找)将找到并返回0
表示父查找表达式的计算结果为0
b1 = [new Node()].find{ 0 }
groovy中的和0
(零)== false
所以,只需将表达式更改为:
b1 = [new Node()].find{it.Nlinks.find{it2 -> it2 == id }!=null}
http://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Collection.html#find()
http://docs.groovy-lang.org/next/html/documentation/core-semantics.html#Groovy-Truth