मैं वर्तमान में "प्रोग्रामिंग इन स्कैला" पुस्तक के माध्यम से काम करके स्कैला सीख रहा हूं। अब तक, वहाँ सब कुछ है कि (एक जावा प्रोग्रामर के नजरिए से) अजीब लग रहा है के लिए अच्छा स्पष्टीकरण किया गया है, लेकिन यह एक एक स्ट्रीम का उपयोग कर फाइबोनैचि अनुक्रम उत्पन्न करने के लिए उदाहरण छोड़ देता है मुझे एक तरह से हैरान:स्ट्रीम-विपक्ष # :: स्कैला में अनुवाद कैसे किया जाता है?
def fibFrom(a: Int, b: Int): Stream[Int] =
a #:: fibFrom(b, a + b)
निर्माण कैसे है स्ट्रीम की? बेशक #::
ऑपरेटर किसी भी तरह जिम्मेदार है। मैं समझता हूं कि चूंकि यह :
में समाप्त होता है, यह सही-सहयोगी है, लेकिन यह स्ट्रीम के निर्माण की व्याख्या नहीं करता है। मुझे लगता है कि यह किसी भी तरह से एक कन्स्ट्रक्टर में स्पष्ट रूप से अनुवादित है लेकिन मुझे नहीं पता कि क्यों और कैसे बिल्कुल।
मैं पहले से ही Predef.scala
और LowPriorityImplicits.scala
में जवाब के लिए देखा है, लेकिन कोई किस्मत अब तक।
क्या कोई मुझे प्रबुद्ध कर सकता है?
धन्यवाद, यही वह है। मैं भूल गया कि अंतर्निहित रूपांतरण को कक्षा के साथी वस्तु में भी परिभाषित किया जा सकता है जिसे परिवर्तित किया जाना चाहिए। – rolve
स्कालाडोक शायद उन हार्ड-कोड किए गए साथी implicits को स्वचालित रूप से शामिल करना चाहिए। – Debilski
शायद स्कैला के लिए नए लोगों को इंगित करें कि यह _just_ नहीं है कि यह सही-सहयोगी है। यह भी है कि ConsWrapper '# ::' को लागू करता है [कॉल-बाय-नाम] (https://github.com/scala/scala/blob/v2.10.3/src/library/scala/collection/immutable/Stream। स्केला # L1042)। अर्थात् '⇒'' ConsWrapper (tl: ⇒ stream [ए]) 'में अनुवाद है ताकि अनुवाद' immutable.this.Stream.consWrapper (fibFrom (b, a + b)) में हो। #: :(ए) 'साधन 'fibFrom (बी, ए + बी)' पहुंचने पर कभी भी कॉल किया जाएगा। – nicerobot