25

Groovy JDK から:

公開コレクション grep()

このオブジェクトが表すアイテムのコレクションを繰り返し処理し、IDENTITY クロージャーをフィルターとして使用して一致する各アイテムを返します。事実上、Groovy の真実を満たすすべての要素を返します。

パブリック コレクション findAll()

IDENTITY Closure に一致する (つまり、Groovy の真実に一致する) すべてのアイテムを検索します。

4

2 に答える 2

24

短い答え: 結果は同じになります。

長い答え: grep通常はフィルター オブジェクトを使用し、その上でisCaseが呼び出されます。そのため、通常、grep の引数は Groovy Closure ではありません。Closure を引数として使用し、ClosureのfindAll結果が true と評価された場合、それは結果のコレクションに取り込まれます。

ここで、Closure にも isCase メソッドがあることを知っておくことが重要です。Closure#isCase(Object)クロージャーの引数として引数を使用してクロージャーを実行し、その結果はGroovy Truthを使用して評価されます。アイデンティティクロージャーの場合、つまり。{it}、これは、クロージャーが与えられたものを返すことを意味します。したがって、Groovy はGroovy Truthを grep 呼び出しの引数に適用します。結果は、findAll の場合と同じになります。

于 2012-05-23T09:59:12.560 に答える