2010-02-17 14 views

उत्तर

41

प्रत्येक बार जब उन्हें एक्सेस किया जाता है तो दृश्य तत्वों को फिर से दबाया जाता है। एक धारा तत्वों में उनका मूल्यांकन किया जाता है क्योंकि उनका मूल्यांकन किया जाता है।

उदाहरण के लिए:

val doubled = List(1,2,3,4,5,6,7,8,9,10).view.map(_*2) 
println(doubled.mkString(" ")) 
println(doubled.mkString(" ")) 

प्रत्येक तत्व के लिए नक्शा फिर से मूल्यांकन होगा दो बार। एक बार पहले println के लिए, और फिर दूसरे के लिए। इसके विपरीत

val doubled = List(1,2,3,4,5,6,7,8,9,10).toStream.map(_*2) 
println(doubled.mkString(" ")) 
println(doubled.mkString(" ")) 

केवल तत्वों को एक बार दोगुना कर देगा।

एक दृश्य संग्रह बनाने के लिए एक नुस्खा की तरह है। जब आप एक दृश्य के तत्वों के लिए पूछते हैं तो यह हर बार नुस्खा लेता है।

एक धारा सूखी मिटाने वाले कार्डों के समूह के साथ एक लड़के की तरह है। लड़का जानता है कि संग्रह के बाद के तत्वों की गणना कैसे करें। आप उसे संग्रह के अगले तत्व के लिए पूछ सकते हैं और आपको उस पर लिखे गए तत्व के साथ एक कार्ड और कार्ड से अपनी अंगुली से बंधे एक स्ट्रिंग (उसे याद रखने में मदद करने के लिए) देता है। इसके अलावा, इससे पहले कि वह आपको एक कार्ड देता है, वह अपनी उंगली से पहली स्ट्रिंग को खोलता है और इसे नए कार्ड से जोड़ता है।

यदि आप पहले कार्ड के लिए पूछते हैं तो आप पहले कार्ड (यानी धारा के सिर का संदर्भ रखें) पर अंततः कार्ड से बाहर हो सकते हैं (यदि आप अगले तत्व के लिए पूछते हैं, लेकिन यदि आपको आवश्यकता नहीं है पहले तत्वों पर वापस जाएं जो आप स्ट्रिंग को काट सकते हैं और अनियंत्रित कार्ड को वापस आदमी को सौंप सकते हैं और वह उन्हें फिर से उपयोग कर सकते हैं (वे बाद में सूखा-मिटा रहे हैं)। इस प्रकार एक स्ट्रीम मेमोरी से बाहर किए बिना अनंत अनुक्रम का प्रतिनिधित्व कर सकती है।

+0

@huynhj आपको यह सही मिला है। मैं इसे और अधिक स्पष्ट बनाने के लिए उत्तर अपडेट कर सकता हूं –

+1

आप उत्तर को छोड़ सकते हैं। कभी-कभी एक रूपक मदद करता है। इस मामले में मैं इसके द्वारा भ्रमित हो गया। पहली वाक्य में यह सब था। – huynhjl

+1

स्ट्रिंग उदाहरण बहुत भ्रमित है। – ziggystar

10

Geoff के answer लगभग सब कुछ शामिल किया गया है, लेकिन मैं जोड़ने के लिए है कि एक Stream, एक List तरह अनुक्रम है, जबकि संग्रह में से हर तरह के (नक्शे, सेट, अनुक्रमित seqs) का नजारा दिखता है चाहता हूँ।

+0

मुझे एक संदेह है। चूंकि कार्य शुद्ध है। संकलक संदर्भित पारदर्शिता या ज्ञापन का उपयोग क्यों नहीं करता है? क्यों दृश्य फिर से recomputing है? –

संबंधित मुद्दे