मुझे लगता है कि AutoOpen
विशेषता के लिए मुख्य उपयोग तब होता है जब आप कुछ लाइब्रेंड मान उपलब्ध करना चाहते हैं जब आपकी लाइब्रेरी का उपयोगकर्ता नामस्थान खोलता है। यह वह जगह है जहां विशेषता बहुत उपयोगी है, क्योंकि मुझे लगता है कि पुस्तकालयों को आम तौर पर नामस्थान में सभी परिभाषाओं को निर्यात करना चाहिए, लेकिन कुछ उद्देश्यों के लिए आपको मान निर्यात करने की आवश्यकता है और नामों को नामस्थान के अंदर परिभाषित नहीं किया जा सकता है।
यहाँ F# async extensions से एक उदाहरण है जो एक गणना बिल्डर को परिभाषित करता है और इस प्रकार यह asyncSeq
मूल्य (लेकिन एक ही समय में, सभी कार्यक्षमता एक नाम स्थान में लपेटा जाता है) का निर्यात करने की जरूरत है:
namespace FSharp.Async
type AsyncSeq<'T> = (* ... *)
type AsyncSeqBuilder() = (* ... *)
[<AutoOpen>]
module GlobalValues =
let asyncSeq = AsyncSeqBuilder()
के उपयोगकर्ता लाइब्रेरी सिर्फ open FSharp.Async
लिख सकती है और वे asyncSeq
देखेंगे। मैं एक ही पैटर्न विभिन्न गणित पुस्तकालयों के साथ प्रयोग किया जाता है लगता है (जहां भी सरल नाम कार्यों निर्यात करना चाहते हैं।)
मॉड्यूल के लिए (जैसे List
और Seq
), मुझे लगता है कि लोगों की सबसे open
का उपयोग नहीं करते और का उपयोग मॉड्यूल नाम (जैसे List.map
) के माध्यम से कार्य करता है, इसलिए यदि आप इसे नेस्टेड मॉड्यूल के लिए उपयोग कर सकते हैं, तो मैंने इसे अक्सर नहीं देखा है।
स्रोत
2012-10-19 15:55:49
VALUES का उपयोग यह स्पष्ट करता है कि इसका उपयोग कैसे किया जाए। thks – nicolas