2010-10-01 8 views
5

यदि एफ # में मेरे पास विधियां हैं:एफ # प्रकार सी # पर कैसे स्थानांतरित करते हैं?

drawBox 
drawSphere 
paintImage 

क्या उन्हें सी # में स्थानांतरित किया जाएगा, वही वही?

यदि ऐसा है, तो क्या यह सी # में नामकरण सम्मेलनों से समझौता नहीं करेगा, जहां विधियों को पास्कलकेस माना जाता है?

या क्या मुझे इसे ठीक करने के लिए एफ # में पास्कलकेस बनाना चाहिए?

उत्तर

8

आपको F# Component Design Guidelines का पालन करना चाहिए।

उल्लेखनीय भागों हैं:

  • एफ # -facing पुस्तकालयों सहित, .NET नामकरण और वस्तु उन्मुख कोड के लिए पूंजीकरण सम्मेलनों का उपयोग करते हैं।
  • एफ # मॉड्यूल में सार्वजनिक कार्यों और मूल्यों के लिए पास्कलकेज़ या ऊंटकेस का उपयोग करें। ऊंटकेस आमतौर पर सार्वजनिक कार्यों के लिए उपयोग किया जाता है जिन्हें अयोग्य (उदा। invalidArg), और "मानक संग्रह फ़ंक्शन" (उदा। List.map) के लिए डिज़ाइन किया गया है। इन दोनों मामलों में, फ़ंक्शन नाम भाषा में कीवर्ड की तरह कार्य करते हैं।

एक और तरीका यह काट रहे हैं:

  • सदस्यों और प्रकार हमेशा PascalCase होना चाहिए, जैसे सी #
  • जाने बाध्य मॉड्यूल में संस्थाओं CamelCase हो सकता है, लेकिन यह सामग्री है आमतौर पर ऐसी चीजें नहीं जो आप सार्वजनिक रूप से लाइब्रेरी से बाहर निकलती हैं जिसका उद्देश्य सी #
+0

धन्यवाद, जिज्ञासा से, क्या आप यह भी जानते हैं कि सी # में एफ # में कैसे निशुल्क कार्य करता है? क्योंकि सी # में एफ # जैसे मुक्त फ़ंक्शन नहीं हो सकते हैं। –

+0

एफ # में मॉड्यूल सी # में स्थिर कक्षाओं की तरह दिखाई देते हैं। ध्यान दें कि एफ # में 'टॉप-स्तरीय' कोड मॉड्यूल में है; जैसे 'Program.fs' में शीर्ष-स्तरीय कोड को 'प्रोग्राम' नामक मॉड्यूल में संकलित किया गया है और इसलिए सी #' Program.blah' देखेंगे। लेकिन यदि आप सी # (दस्तावेज़ में सिफारिशों के अनुसार) के साथ इंटरऑप करना चाहते हैं तो सार्वजनिक एफ # मॉड्यूल से बचें। दूसरे शब्दों में, दस्तावेज़ पढ़ें; हमने इस तरह के सवालों के जवाब देने के लिए इस सारी जानकारी को एक साथ रखा है। – Brian

+0

धन्यवाद ब्रायन, मुझे नहीं पता था कि आप एफ # देवों में से एक थे। बीटीडब्ल्यू संकलित नाम का उपयोग करने के लिए स्वीकार्य है क्योंकि टॉमस ने उनके जवाब में उल्लेख किया है? यह दोनों दुनिया के सर्वश्रेष्ठ की तरह लगता है। –

1

प्रकार विधियों के नाम एफ # और सी # दोनों में समान होंगे। यदि आप सी # में पास्कलकेस चाहते हैं - तो आपको इस नामकरण सम्मेलन का उपयोग एफ # में करना चाहिए, वही कैमेलकेस के साथ।

+0

ठीक है धन्यवाद। चूंकि मैं सी # अधिक का उपयोग करता हूं, मैं शायद ऐसा करूँगा। बस उस मामले में सोच रहा था, यह एफ # के नामकरण सम्मेलनों को बर्बाद कर देगा। –

-1

नामकरण सम्मेलनों द्वारा उपभोग किया जाना है मनुष्यों के लिए हैं। कंपाइलर्स और रनटाइम वास्तव में परवाह नहीं करते हैं यदि प्रत्येक परिवर्तनीय नाम पूरी तरह से पढ़ा जा सकता है, तो वे अभी भी काम करेंगे।

+0

डाउन वोट क्यों? मेरा मुद्दा यह इंगित करना था कि नामकरण सम्मेलन हमारे लिए हैं और जब मिश्रित वातावरण में अलग-अलग सम्मेलन होते हैं तो हम अपने लिए क्या काम कर सकते हैं, क्योंकि संकलक/रन-टाइम वैसे भी सही काम करेंगे। – cdkMoose

5

जैसा कि अन्य ने पहले से ही बताया है, संकलित सदस्यों के नाम ठीक उसी तरह हैं जैसा आपने एफ # कोड में लिखा था। सामान्य रूप से, कक्षाओं की घोषणा करते समय मानक सी # नामकरण सम्मेलनों का पालन करना एक अच्छा विचार है। एफ # मॉड्यूल घोषित करते समय आप camelCase (खासकर मॉड्यूल के लिए जो एफ # उपयोगकर्ताओं के लिए लक्षित हैं) या PascalCase का उपयोग कर सकते हैं यदि आप उन्हें सी # से उपयोग करना चाहते हैं।

इसके अलावा, एक चाल है जिसका आप उपयोग कर सकते हैं (यह List.map जैसे कार्यों के लिए एफ # कोर लाइब्रेरी में उपयोग किया जाता है जो वास्तव में List.Map के रूप में संकलित किए जाते हैं)। आप संकलित संस्करण में नाम निर्दिष्ट करने के CompiledName विशेषता का उपयोग कर सकते हैं:

module Bar = 
    [<CompiledName("Foo")>] 
    let foo a = a + 1 

यह एक एकीकृत नामकरण परंपरा का उपयोग करने के शायद बेहतर है, लेकिन आप एफ # उपयोगकर्ताओं और मानक नेट के लिए एक अच्छी लघु नाम रखना चाहते हैं सी # उपयोगकर्ताओं के लिए नाम, यह एक दिलचस्प विकल्प है।

+0

वाह, वह विकल्प नियम। इसे इंगित करने के लिए धन्यवाद। –

+0

व्यक्तिगत रूप से, मैं वास्तव में 'संकलित नाम' से नापसंद करता हूं; यह हल होने के रूप में कई समस्याओं को बनाता है। सबसे अच्छा मैं इसके बारे में कह सकता हूं कि यह FSharp.Core.dll जैसी चीजों के लिए एक आवश्यक बुराई है (यदि हम कभी भी एफ # रनटाइम को .NET Framework में उचित स्थानांतरित करते हैं, तो संकलित नाम .NET के साथ संरेखण में होना चाहिए, जो कि है पहले स्थान पर 'compiledName' प्रेरित)। – Brian

+0

जैसा ब्रायन ने ऊपर बताया, कृपया केवल अंतिम उपाय के विकल्प के रूप में विचार करें। –

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