2015-08-04 13 views
5

Android Studio ve gradle build script ile çalışıyorum. Bazı ayarları değiştirdiğimde bazı alanlara iterate ihtiyacım var. Ama ben differenceall ve each arasında çok açık değilim. Örneğin, çıkış apk dosya adını değiştirmek için bazı kodları googled ettim. Kod dolaşır all ile applicationVariants ve each ile variant.outputs:Notta 'hepsi' ile 'her' arasındaki fark nedir?

applicationVariants.all { variant -> 
    variant.outputs.each { output -> 
     output.outputFile = new File(output.outputFile.parent, "MyApp.apk") 
    } 
} 

cevap

2

each düz gelenekselleşmiş bir yapıdır. Belirli bir nesne üzerinde yinelemek için kullanılır, değiştirmez (orijinal nesne) ve tamamlandıktan sonra (değişmemiş) nesneyi döndürür. Bakınız: all gradle kendisi tarafından ilave edilen bir yöntemdir

assert [1, 2, 3] == [1, 2, 3].each { println it } 

iken. Yani, android eklentisi, getApplicationVariants yöntemine sahip this uzantısını ekler. Groovy get'u çıkarmayı sağladığı için sadece applicationVariants kullanılabilir. Şimdi, belirtilen uzantı, this - this - varyasyonların koleksiyonunu tutmak için this sınıfını kullanır. Son all yönteminde, bir toplu işlemin olduğu sadece göründüğü kadarıyla tanımlanmıştır.

+0

Yani 'her' konteyner için salt okunur mu? Peki, 'output.outputFile' değiştiren kod nasıl çalışır? – jayatubi

+0

Tam olarak değil :) Nesnenin iç durumunu değiştirir, değiştirilebilir. Örneğin. Listeler listesini yinelemek ve koleksiyondaki her listeye rastgele bir öğe eklemek için her birini kullanabilirsiniz. – Opal

+0

@jayatubi, şimdi açık mı? Eğer öyleyse, lütfen cevabı kabul edin. – Opal

İlgili konular