मैं निम्नलिखित एफ # कार्यक्रम है:एफ # मॉड्यूल आरंभीकरण पर अलग-अलग व्यवहार
foo
bar
42
जब मैं बदलने के लिए:
module MyModule
printfn "foo"
let test =
printfn "bar"
42
यह निम्न उत्पादन का उत्पादन:
open MyModule
printfn "%d" test
MyModule किया जा रहा है के साथ
MyModule से:
module MyModule
printfn "foo"
let test =
// printfn "bar" <-- note the comment!
42
... परिणाम है:
42
क्यों "foo" अब और मुद्रित नहीं प्राप्त करता है?
धन्यवाद, इसे पढ़ने के बाद कुछ बार मैं इसे समझता हूं। हालांकि व्यवहार बहुत जटिल/असंगत लगता है। उदाहरण के लिए "टेस्ट = 1 + 2" "foo" प्रिंट नहीं करता है, जबकि "test = = 1 +" जोड़ने के साथ "test = = + b" प्रिंट करें "foo" प्रिंट करते हैं। यह भाषा की कल्पना के अनुरूप है लेकिन अभी भी अजीब लगता है। क्या कोई कारण है कि स्थिर प्रारंभकर्ताओं को मॉड्यूल के भीतर किसी भी चीज़ पर पहली पहुंच पर निष्पादित नहीं किया जाता है, भले ही यह एक साधारण निरंतर अभिव्यक्ति या कुछ और हो? – stmax
मैंने यह दिखाने के लिए अपना जवाब अपडेट कर दिया है कि सी # समान व्यवहार करता है। मुझे लगता है कि यह एक प्रदर्शन अनुकूलन हो सकता है। चूंकि निरंतर दुष्प्रभावों पर निर्भर होना असंभव है, या उस मामले के लिए कोई गणना नहीं है, इसलिए इसे प्राप्त करने से पहले स्थिर प्रारंभिक होने का कोई स्पष्ट कारण नहीं है। – Daniel