"Groovy in Action"によると、クロージャーはいくつかの方法で宣言できます。いくつかの方法: DEFプリンタ= {線 - >のprintlnライン} DEFクロージャGETPRINTER(){ 戻り{線 - >のprintlnライン} }Groovyクロージャーのオーナー
閉鎖にClosures, official documentationowner
によれば
"それはクロージャやクラスである、直接囲むオブジェクトを返します。"どちらの場合も
class Mother { def prop = 'prop' def method(){ 'method' } Closure birth (param) { def local = 'local' def closure1 = { [ this, prop, method(), local, param ] } return closure1 } def birth2 = { param -> def local = 'local' def closure2 = { [ this, prop, method(), local, param ] } return closure2 } } Mother julia = new Mother() def closure = julia.birth('param') assert closure.owner == julia assert closure.delegate == julia def closure2 = julia.birth2('param') assert closure2.owner == julia assert closure2.delegate == julia
、
birth2
はマニュアルに従って閉鎖されているbirth
ANB:
[OK]を、のを見てみましょう。これらのクロージャ内では、closure1
とclosure2
と宣言します。私は彼らに言及するだけの名前を付けました。このclosure1
とclosure2
の所有者は、birth
とbirth2
を参照してください。公式の文書によると。しかし、最初の例ではowner
はクラスjulia
のインスタンスを指します。 2番目の例では、それはbirth2
を参照していると信じていますが、それをアサートする方法はわかりません。
誰でもその違いを説明できますか?
差にあるクロージャをなし閉鎖、方法であって、閉鎖GETPRINTER(){戻り{線デフ - > println line}}これはメソッドであり、クロージャではありません。そして、明示的な "Closure"はこの場合何も意味しませんか? – Alexandr
これは戻り値の型です。したがって、クロージャを返すメソッドです。 –
と同様に 'int add(int a、int b){a + b}'は2つのintを受け取り、intを返すメソッドです。 'Closure method(String a){{ - > a * 2}}'メソッドそれは文字列を受け取り、Closureを返します。 –