使用零int时发现错误?

时间:2017-05-29 13:19:22

标签: groovy find findall

我偶然发现了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

这种行为是否是预期的,我错过了为什么这应该是它的行为方式,或者这是一个错误?

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