2017-06-09 10 views
2

すべてのメソッドまたはすべてのメソッドが長いリストで評価され、最初の要素のクロージャの値が最終結果を決定するのに十分であると仮定します(すべての場合はtrue、すべての場合はfalse)。これらのメソッドは、リストの残りの要素を処理し続けますか、すぐに戻りますか?Groovyはどの方法でも短絡していますか?

def lst = [1,2,3,4] 
//Do either of these functions evaluate the 2nd, 3rd and 4th element of lst? 
boolean value1 = lst.any{element -> element == 1} 
boolean value2 = lst.every {element -> element == 2} 

答えて

2

any()every()短絡:-(ダウンの投票に値するし、できるだけ早く返す。

あなたがany()every()のソースでこれを見ることができます。これらのメソッドは、各反復処理を各オブジェクトの上評価します条件が(any()の場合)/ではない場合(every()の場合)、クロージャとリターンが返されます。

-1

YesとNoあなたのポストの最初の閉鎖 - any - それは真と評価させ、最初の値に短絡だろう。閉鎖everyしかし、設計とロジックで短絡することはできません。あなたのケースではelement == 2に指定された条件を満たすことを確認するために各値をスキャンする必要があります。テストにはGroovy web consoleを使用してください。結果を確認するにはassertステートメントまたはprintln value1; println value2ステートメントを追加することを忘れないでください。

更新:回答が早すぎます。両方が短絡します。 everyは、評価するものが見つかった場合に短絡して、誤って評価されます。ごめんなさい。私は

関連する問題