2011-03-29 34 views

cevap

9

each uygulanması bunun bir boşlukla güvenli bir şekilde hedef var içinde iterator yöntemi çağırmak çalışır. each null nesnesinde veya iterator yöntemi olmayan bir nesne çağrılırsa, hiçbir şey olmaz.

ben kaynak kodunu görmedim ama Gerçekte this§

Object each(Closure closure) { 

    if (this?.respondsTo("iterator")) { 

    def iterator = this.iterator() 

    while (iterator.hasNext() { 
     def item = iterator.next() 
     closure(item) 
    } 
    } 
    return this 
} 

§ gibi bir şey olabilir

, bu yöntem muhtemelen Java yerine Groovy yazılmıştır

+5

Aslında, org.codehaus içinde .groovy.runtime.NullObject.java', 'public Iterator iterator() {return Collections.EMPTY_LIST.iterator(); } 'Yani 'NullObject' (' null') '' 'her bir' ' –

+0

@tim_yates tarafından sorgulandığında bir' '' '' '' '' '' '' bir döndürücü '' döndürür '', ama benim uygulamamı tercih ederim :) –

+0

Hehe, hayal dünyasında çok fazla keyif alıyor ha? ;-) –

2

Her bir kapatma kullanıldığında boş değer, 0 öğeli bir koleksiyonla aynıdır. Eğer kodu

def test=null 
test.each {println "In closure with value "+it} 

varsa baskı deyimi yürütme olmayacaktır. Testi

def test=[1,2,3] 

'a değiştirirseniz, çıktı alırsınız.

İlgili konular