2012-05-01 34 views

Odpowiedz

4

Nie jest czysty sposób to zrobić przy użyciu biblioteki podstawowych jak teraz, ale jeśli rzucisz swoją foldLeft potem jest

main() { 
    var sum = foldLeft([1,2,3], 0, (val, entry) => val + entry); 
    print(sum); 
} 

Dynamic foldLeft(Collection collection, Dynamic val, func) { 
    collection.forEach((entry) => val = func(val, entry)); 
    return val; 
} 

Rozmawiałam z zespołem Dart o dodanie foldLeft do podstawowych kolekcji i mam nadzieję, że wkrótce to nastąpi.

+0

Można to rozwiązać, dodając funkcję wstrzykiwania do interfejsu kolekcji, tak jak w Ruby. –

+1

To bardzo ładny kod, Lars. Nie tylko to było to, czego szukałem, teraz rozumiem składanie. –

+1

Z pewnością można to zrobić z anonimową funkcją, z lub bez kodu bibliotecznego, aby to zrobić, po prostu wpisując kod w foldLeft powyżej. I prawie zawsze będziesz potrzebować zmiennej, chyba że jesteś nadmiernie sprytny z rekurencją. Możesz też po prostu zrobić to za pomocą for (var each in ...) zamiast forEach i zastosować tę funkcję w ciele pętli for. Albo działa. –

4

Nadal uważam, że oczywisty sposób jest bardziej przejrzysty i łatwiejszy do zrozumienia dla tego konkretnego problemu.

num sum = 0; 
[1, 2, 3].forEach((num e){sum += e;}); 
print(sum); 

lub

num sum = 0; 
for (num e in [1,2,3]) { 
    sum += e; 
} 
3
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current); 

lub krótszych nazw zmiennych, aby zająć mniej miejsca:

int sum = [1, 2, 3].fold(0, (p, c) => p + c); 
Powiązane problemy