私はfind関数のこの奇妙な振る舞いを見つけました。ゼロのintを使用するとfindのバグはありますか?
Integer Arrayで0を見つけるために "find"を使うと、配列に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
が期待されるこの動作であり、私はこれはそれの動作方法であるべき理由を何かが欠けている、またはこれですよバグ?
私は外見つけるにブールGroovyのマジックに暗黙の整数を見落とし:) をネストされた検索が整数と見つけ外側が同じようにint型をevalutes返し、それを得ますtrueの場合は0を返し、falseの場合はfalseを返します。そして、findAllは1つの要素を持つ配列を返し、常にtrueであるために機能します。 ありがとう:) –
フードの下でJavaを忘れないでください: b1 = [new Node()]。find {it.Nlinks.contains(id)} – user1708042