2014-06-24 3 views
6

मुझे मौजूदा मूल्यों का पीछा करने के लिए में वर्णित की तरह:क्या विजुअल स्टूडियो में एफ # में मूल्यों को कम करने के लिए चेतावनियां रखने का कोई तरीका है?

Shadowing and Nested function
immutable in F#
f# duplicate definition
FSharp for fun and profit comment

अचल स्थिति और प्रकार सुरक्षा कि एफ # इतना मजबूत बनाता है की धारणा के खिलाफ जा रहा जा रहा है। एफ # में 0 #में सी # की तुलना में छाया। यह मुझे पता लगाने में काफी समय लगा कि मेरे कोड में एक बग एक ही दायरे के भीतर किसी नाम की अनजान छाया के कारण था। क्या वीएस में मूल्यों को कम करने के लिए कंपाइलर चेतावनियां रखने का कोई तरीका है?

मुझे पता है कि कुछ मामलों में यह उपयोगी हो सकता है। उदाहरण के लिए Checked Aritmetics के लिए।

+2

छायांकन उपयोगी है, जैसा कि यहां बताया गया है: http://infsharpmajor.wordpress.com/। आप यह समझाना चाहेंगे कि आप क्या सोचते हैं, क्योंकि यह हो सकता है कि आपकी समझ बंद हो गई है, और इसे साफ़ करने से आपकी चिंता हल हो सकती है। –

+0

@ गोस्विन: [एफ # पावर टूल्स] (http://visualstudiogallery.msdn.microsoft.com/136b942e-9f2c-4c0b-8bac-86d774189cff) संदर्भों को हाइलाइट करेगा, जो कि उन प्रकार की बग से बचने में मदद कर सकता है। – Daniel

+0

@JamesBlack मैंने अपने प्रश्न को स्पष्ट करने के लिए संपादित किया – Goswin

उत्तर

3

छाया में पेशेवरों और विपक्ष हैं। वसा-उँगलियों के छायांकन प्रयासों के कारण मुझे भी बग का सामना करना पड़ा है। प्लस तरफ, यह आपकी वैरिएबल स्पेस को @JoelMueller के रूप में साफ़ रखने में मदद कर सकता है।

शेडिंग बग म्यूटेबल वैरिएबल बग से मूल रूप से अलग हैं। वे टाइपो विविधता के हैं। उनका विश्लेषण करना बहुत आसान है: ऐतिहासिक सूचना हानि पर्यावरणीय संदर्भ बनाम लेक्सिकोोग्राफिक संदर्भ में कम हो गई है। यही है, छाया के साथ, आप हमेशा मानसिक स्टैक अनोलिंग के माध्यम से बाध्यकारी के मूल्य का पता लगा सकते हैं, जबकि परिवर्तनीय उत्परिवर्तन जो अनिवार्य रूप से गेटोस (पते पर कूदते हैं) बनाते हैं।

व्यावहारिक रूप से, छाया अभी भी बग के पूरे वर्ग को समाप्त करती है। आपको किसी दूरी से "डरावनी कार्रवाइयों" का सामना नहीं करना पड़ेगा। अर्थात्, आप मौजूदा दायरे के सापेक्ष नेस्टेड स्कॉप्स में बंद होने वाले चर या चर में चर के चर के साथ मुद्दों में नहीं भागेंगे।

4

एक जगह जो मैं छाया का उपयोग करता हूं वह एक डिफ़ॉल्ट मान पर वैकल्पिक पैरामीटर को हल करते समय कोई मूल्य प्रदान नहीं किया जाता है।

member x.Foo(?myFlag: bool) = 
    let myFlag = defaultArg myFlag false 
    ... 

इसके अलावा एफ # इंटरएक्टिव, जिस तरह से यह अब लागू हो जाता है, काफी पूरी तरह से गैर कार्यात्मक हो अगर हम छाया नहीं था होता।

संबंधित मुद्दे

 संबंधित मुद्दे