Birincisi, hepsi katı değil . Bu, işlevlerle ilgili belirli bir matematiksel anlama sahiptir, ancak temel olarak, önceden değil, talep üzerine hesaplandıkları anlamına gelir.
Streamgerçekten de tembel bir liste. Aslında, Scala, bir Streambir ise Listkimin tailbir olduğunu lazy val. Hesaplandıktan sonra, bir değer hesaplanmış olarak kalır ve tekrar kullanılır. Veya, dediğin gibi, değerler önbelleğe alınır.
Bir Iterator, yalnızca bir kez kullanılabilir, çünkü kendi içinde bir koleksiyon değil, bir koleksiyona geçiş göstergesidir . Ne Scala o özel kılan gibi dönüşümü uygulayabileceğiniz gerçektir mapve filterve sadece yeni olsun Iteratorbir sonraki element için sorduğunuzda sadece bu dönüşümleri uygulanacağı.
Scala, sıfırlanabilen yineleyiciler sağlardı, ancak genel olarak desteklenmesi çok zordur ve 2.8.0 sürümünü yapmadılar.
Görünümlerin bir veritabanı görünümü gibi görüntülenmesi amaçlanmıştır. Bir "sanal" koleksiyon üretmek için bir koleksiyon için geçerli olan bir dönüşüm serisidir. Söylediğiniz gibi, tüm dönüşümleri her getirmeniz gerektiğinde tüm dönüşümler yeniden uygulanır.
Hem Iteratorgörüntüler hem de görüntüler mükemmel bellek özelliklerine sahiptir. Streamgüzeldir, ancak Scala'da asıl yararı sonsuz diziler yazmaktır (özellikle özyinelemeli olarak tanımlanan diziler). Bir edebilir tüm tutarak önlemek Streamemin onun bir başvuru tutmayız yaparak, olsa da, bellekte head(örneğin, kullanarak defyerine valtanımlamak için Stream).
Görüşlerin yol açtığı cezalar nedeniyle, genellikle forcedönüşümleri uyguladıktan sonra veya görüşün toplam boyutuna kıyasla yalnızca birkaç öğenin getirilmesi bekleniyorsa bir görünüm olarak saklanmalıdır.