Ben Şimdi v
üzerinde f
uygulamak ve esaslı bazı sonuçlar seçmek istediğinizScala: Bir koleksiyonu fonksiyonunu uygulamak ve sonuçların bazıları
def f(x: Int) = {
x + 3
}
val v = 0 to 10e7.toInt
v
pahalı bir işlevi f
ve birçok değerlere sahip olduğunu varsayalım sadece verim bazı durumlarda.
Bu
v.map(f).filter(_ > 10e7 - 5)
gibi bunu yapabilir Ama bütün v.map(f)
ilk hafızada saklanır çünkü bu hiç değil mümkün değil.
for(a <- v if f(a) > 10e7 - 5) yield f(a)
Ama şimdi söz konusu değildir bazı elementler için iki kez f hesaplamak gerekir:
Öyleyse Diğer seçenek yapmaktır!
Sonuç olarak, tüm sonuçları saklamaksızın filtrelemeyi nasıl gerçekleştirebilirim, ancak yine de sonuçları alırım. mantık (Açıkçası bu işe yaramaz) böyle bir şey gibi görünür:
for(a <- v) {
val b = f(a)
if(b > 10e7 - 5) yield b
}