OCLのforAllメソッドに相当するGroovyとは何ですか?
アイテムのリストがあるとしましょう。
def items = new LinkedList<Item>();
すべての項目が特定の基準に一致する場合にのみ保持される述語を表現するGroovyの方法は何ですか?
次のコードスニペットは機能しません。これは、内部リターンが各クロージャの現在の反復からのみジャンプし、forAllメソッドからはジャンプしないためです。
boolean forAll(def items)
{
items.each { item -> if (!item.matchesCriteria()) return false; };
return true;
}
次のコードスニペットは、トリックを実行する必要がありますが、Groovyのようではなく、扱いにくいと感じています。
boolean forAll(def items)
{
boolean acceptable = true;
items.each { item -> if (!item.matchesCriteria()) acceptable = false; };
return acceptable;
}
述語を怠惰に評価する方法を探しています。これにより、一致しない最初の項目が見つかったときに評価が終了します。