2016-03-28 16 views
0

"Groovy in Action", gereğine göre, kapaklar çeşitli yollarla bildirilebilir. yollarından bir çift: def yazıcı = {hat -> println hat} def Kapanış GetPrinter() { dönüş {line -> println hat} }Oluklu kapatmalarda bulunanlar

kapatılmasıyla Closures, official documentationowner göre

"doğrudan çevreleyen nesneyi iade et, bir kapat ya da bir sınıf." Her iki durumda da

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 belgelere göre muhafazalardır birth ANB:

Tamam, bir göz atalım. Bu kapakların içinde closure1 ve closure2 bildiriyoruz. Onlara sadece onlara başvurmak için isimler verdim. Bu closure1 ve closure2'un sahipleri birth ve birth2'a başvurmalıdır. Resmi belgelere göre. Ancak, ilk örnekte owner, sınıf örneğine başvurur - julia. İkinci örnekte, bunun birth2'a atıfta bulunduğuna inanıyorum, ancak bunu nasıl kanıtlayacağımı bilmiyorum.

Farkı bilen var mı, lütfen?

cevap

0

birth

birth2

belgede, iç sınıf I bildirirken demektir

+0

farkı ile uzanan bir kapatma kısmının değil bir kapak, bir yöntemdir: Kapatma GetPrinter() {dönüş {hattı def - > println line}} bir yöntem değil, bir kapatma. Ve açık "Kapanış" bu durumda hiçbir şey ifade etmiyor mu? – Alexandr

+2

Bu dönüş tipi. Yani bir kapanış döndüren bir yöntem. –

+0

Like int int int (int a, int b) {a + b} 'iki virgül kabul eden ve int döndüren bir yöntemdir, 'Kapatma yöntemi (String a) {{-> a * 2}}' bir yöntemdir bir dizge alır ve bir Kapanış döndürür –