2012-11-15 21 views
6

मुझे एहसास है कि यह शायद एक साधारण सवाल है लेकिन कोड की नीचे पंक्ति में प्राप्त '# ::' क्या है। क्या यह विपक्ष का एक विशेष भिन्नता है?ऑपरेटर # :: का क्या अर्थ है?

def from(n: Int): Stream[Int] = n #:: from(n + 1) 
+1

आपको स्कैला कक्षा में कार्यात्मक प्रोग्रामिंग लेनी होगी। मैं पेरे उत्तर से सहमत हूं। – cainj

उत्तर

11

इस ऑपरेटर इस्तेमाल किया जाता है हो जाता है सूचियों के विपरीत streams बनाने के लिए। सरल विपक्ष के साथ एक ही कोड का टुकड़ा पर विचार करें:

def from(n: Int): List[Int] = n :: from(n + 1) 

इस विधि StackOverflowError में परिणाम होगा चल रहा है। लेकिन Stream[Int] पूंछ के साथ केवल तभी मूल्यांकन किया जाता है जब इसकी आवश्यकता होती है (और पहले से ही गणना किए गए मान याद किए जाते हैं)।

+0

क्योंकि 'def' का उपयोग किया जाता है मानों को याद नहीं किया जाता है;) – sschaef

+1

@sschaef: true, 'val stream = से (0)' का उपयोग करना होगा, धन्यवाद। –

6

यह सूचियाँ के लिए :: के बराबर है, लेकिन स्ट्रीम के साथ इस्तेमाल किया

है, n एक धारा की सिर जहां from(n+1)पूंछ

1

इसका मतलब स्ट्रीम ऑब्जेक्ट बनाना है।

यह cons के लिए :: की बजाय सूची के लिए समान है, जो हमेशा एक सूची बनाता है, #:: हमेशा स्ट्रीम बनाता है।

0

कुछ देर हो चुकी है, लेकिन http://scalex.org/ है जो ऐसी चीजों को लॉक करने के लिए वास्तव में अच्छा है (Google वास्तव में गैर-अल्फा-न्यूमेरिक पर कुछ भी गड़बड़ है)! शुभ लाभ!

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