2014-07-10 15 views
9

यह अनुमति दी है:मॉड्यूल और वर्ग ही नाम के साथ

type Test = class end 

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>] 
module Test = begin end 

लेकिन यह नहीं:

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>] 
module Test = begin end 

type Test = class end 

क्यों?

दूसरे मामले में, त्रुटि है: प्रकार या मॉड्यूल 'टेस्ट' की डुप्लिकेट परिभाषा।

मुझे कुछ सार्वजनिक [<Literal>] स्थिरांक को परिभाषित करने में सक्षम होना पसंद है जो एक प्रकार के लिए आवश्यक हैं और उसी नाम वाले मॉड्यूल के अंदर प्रकार के उपयोगकर्ताओं के लिए महत्वपूर्ण हैं।

+0

मैं कल्पना में कुछ भी नहीं दिख रहा है एक आवश्यक आदेश के बारे में, तो मेरा अनुमान है कि यह एक बग है। – Daniel

+0

कुछ "मॉड्यूल टेस्ट_लिटरल्स" जैसा होगा, और उसके बाद टेस्ट टाइप करने से पहले "टेस्ट_लिटरल्स खोलें" चाल करें? – sgtz

उत्तर

13

आप प्रकार घोषणा खोल सकते हैं, इसे बंद करें और बाद में, कुछ इस तरह फिर से खोलने:

type Test = class end 

[<CompilationRepresentation (CompilationRepresentationFlags.ModuleSuffix)>] 
module Test = 
    [<Literal>] 
    let myLiteral = "myLiteral" 

type Test with 
    static member test =() 

मैं इस चाल हर समय का उपयोग करें;)

+0

यह एक साफ चाल है। एक और डुप्लिकेट परिभाषा शुरू करके डुप्लिकेट परिभाषा त्रुटि को ठीक करना ... अच्छा किया, महोदय! लेकिन मुझे लगता है कि यह केवल प्रकार के एक्सटेंशन के साथ काम करता है? फिर भी, यह मेरे मामले में पूरी तरह प्रयोग योग्य है ... –

+3

@NikontheTird यह एक प्रकार के एक्सटेंशन की तरह दिखता है लेकिन यह नहीं है। जब तक यह एक ही फाइल में है, तब तक एफ # कंपाइलर सबकुछ एक साथ रखता है। – Gustavo

+0

@ गुस्तावो अच्छी चाल के लिए धन्यवाद, हालांकि यह काम नहीं करता है जब "टेस्ट" एक रिकॉर्ड प्रकार है .. जिसे मुझे कभी-कभी आवश्यकता होती है। – trek42

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