जब एफ # में कोड के इस टुकड़े संकलन मैं सिर्फ ढांचा संस्करणों के बीच व्यवहार में बदलाव का सामना करना पड़ा:क्यों Lazy.CreateFromValue का व्यवहार .NET फ्रेमवर्क संस्करणों के बीच F # में बदल गया है?</p> <pre><code>let test = Lazy.CreateFromValue 1 </code></pre> <p>.NET फ्रेमवर्क 2.0 के खिलाफ संकलित, एक "पहले से ही बनाया" लेज़ी वस्तु में अभिव्यक्ति परिणाम, वह यह है कि:
test.IsValueCreated = true
जब .NET फ़्रेमवर्क 4.0 के खिलाफ संकलित, एक "unevaluated" आलसी वस्तु में अभिव्यक्ति परिणाम, वह यह है कि:
test.IsValueCreated = false
केवल परीक्षण तक पहुंचने के बाद। बाद के मामले में वैल्यू दोनों बराबर हैं।
मुझे कहीं भी इस बदलाव का कोई संदर्भ नहीं मिला, इसलिए मेरा सवाल यह है कि यह अलग तरीके से व्यवहार क्यों करता है और परिवर्तन के पीछे तर्क क्या था (यह तोड़ रहा है)। मेरी राय में, .NET 2.0 में व्यवहार अधिक समझ में आता है - एक ठोस मूल्य से एक आलसी वस्तु बनाने के परिणामस्वरूप "पहले ही मूल्यांकन किया गया" आलसी वस्तु होनी चाहिए।
यदि इसका पहले से मूल्यांकन किया गया है, तो इसे शायद ही कभी मूल्यांकन किया जा सकता है ... –
@MarkSeemann हाँ, लेकिन .NET 2 में, यह आलसी मूल्यांकन नहीं किया गया है, इसलिए मुझे लगता है कि कुछ भ्रम क्यों है। यह और भी है कि fsharp.core आलसी चीजें करता है ताकि इसे आलसी जैसा दिखने के लिए .NET 2 में किया जा सके, लेकिन यह कभी आलसी नहीं है। –