आम तौर पर अगर आप एक Stream
वस्तु बनाने, सिर बेसब्री से मूल्यांकन किया जाएगा:स्ट्रीम के प्रमुख का मूल्यांकन कब किया जाता है?
scala> Stream({println("evaluating 1"); 1} , 2, 3)
evaluating 1
res63: scala.collection.immutable.Stream[Int] = Stream(1, ?)
हम एक धारा जो हम एक ही बयान में पहले जोड़ें करने के लिए बनाते हैं, तो यह थोड़ा आश्चर्य की बात लगता है कि सिर से पहले मूल्यांकन नहीं किया गया है समामेलन अर्थात
scala> 0 #:: Stream({println("evaluating 1"); 1} , 2, 3)
res65: scala.collection.immutable.Stream[Int] = Stream(0, ?)
(#::
राइट साहचर्य और ConsWrapper
पर आगे जोड़ते विधि है, जो Stream
का एक अंतर्निहित वर्ग है। है)
कैसे इस 0 prepending से पहले उसके सिर का मूल्यांकन नहीं करता है? क्या यह है कि पूंछ स्ट्रीम (या विपक्ष सेल) ढेर पर मौजूद नहीं है जब तक हम परिणामी स्ट्रीम से मूल्य नहीं ले लेते? लेकिन यदि हां, तो हम उस ऑब्जेक्ट पर #::
विधि को कैसे कॉल करते हैं जो अभी तक मौजूद नहीं है?
मेरा सुझाव है कि आप यह समझने के लिए 'जावप' का उपयोग करें कि क्या हो रहा है। –
मैंने यह पाया कि स्रोत को देखकर (मेरा जवाब सही है) –