मैंने देखा है कि निम्न कोड को संकलित करता है और वी.एस. 2013 में काम करता है:फ़ंक्शन के अंदर "डू" क्यों अनुमति दी जाती है?
let f() =
do Console.WriteLine(41)
42
लेकिन जब एफ # 3.0 विनिर्देश को देख मैं do
का कोई उल्लेख इस तरह से इस्तेमाल किया जा रहा नहीं मिल रहा। जहाँ तक मेरा बता सकते हैं, do
निम्नलिखित का उपयोग करता है हो सकता है:
- लूप के एक भाग के रूप (जैसे
while expr do expr done
), उस मामले यहाँ नहीं है। - गणना भाव अंदर
, उदा .:
seq { for i in 1..2 do do Console.WriteLine(i) yield i * 2 }
कि यहाँ या तो मामले में नहीं है,
f
किसी भी गणना भाव शामिल नहीं है।हालांकि मुझे यहां क्या भ्रमित करता है यह है कि विनिर्देश के अनुसार,
do
in
द्वारा पालन किया जाना चाहिए। हल्के वजन वाले वाक्यविन्यास के कारणin
वैकल्पिक होना चाहिए, लेकिन इसे यहां जोड़ना एक संकलन त्रुटि ("अप्रत्याशित टोकन 'या' अधूरा अभिव्यक्ति" में) का कारण बनता है। मॉड्यूल या कक्षा के अंदर वक्तव्य। यह यहां भी मामला नहीं है,
do
एक फ़ंक्शन के अंदर है, मॉड्यूल या कक्षा के अंदर नहीं।
मैं यह भी देखा कि #light "off"
साथ, कोड संकलन नहीं करता है ("अप्रत्याशित कीवर्ड बंधन में 'do'"), लेकिन मैं कुछ भी है कि या तो हल्के वाक्य रचना पर अनुभाग में इस व्याख्या नहीं मिला ।
इस सब के आधार पर, मुझे लगता है कि एक समारोह के अंदर do
का उपयोग करके इस तरह संकलित नहीं होना चाहिए, लेकिन ऐसा करता है। क्या मुझे विनिर्देशन में कुछ याद आया? या यह वास्तव में संकलक में या विनिर्देश में एक बग है?
इसे 'डू' बाध्यकारी कहा जाता है। मैं इसे spec में नहीं मिला, लेकिन यह [एमएसडीएन पर दस्तावेज] (http://msdn.microsoft.com/en-us/library/dd393786.aspx) है। – Daniel
@Daniel मैंने तीसरा मामला बताया है, एक मॉड्यूल के अंदर 'do''। "जब आप किसी फंक्शन के स्वतंत्र रूप से * कोड निष्पादित करना चाहते हैं तो एक बाध्यकारी का उपयोग करें * – svick
उद्धरण को समाप्त करने के लिए: _ फ़ंक्शन * या वैल्यू डेफिनिशन * पर निर्भरता। * दूसरा मामला किसी फ़ंक्शन के भीतर लागू हो सकता है। – Daniel