2016-08-08 13 views
5

मैं वर्तमान में एक मुफ्त ऑनलाइन संसाधन के साथ F # सीख रहा हूं। चूंकि मैं उत्सुक हूं और कुछ छोटे अभ्यासों में सीखा सामान लागू करने का प्रयास करता हूं, इसलिए मैं खुद एमएसडीएन एफ # दस्तावेज़ीकरण से अक्सर परामर्श करता हूं।एफ # प्रलेखन फ़ंक्शन हस्ताक्षर को समझना

लेकिन प्रलेखन वास्तव में मेरे लिए गुप्त लगता है। उदाहरण के लिए pown फ़ंक्शन के लिए यह documentation page लें। उपयोग सीधे आगे सुंदर है, लेकिन मैं कार्यों हस्ताक्षर समझ में नहीं आता:

// Signature: 
pown : ^T -> int -> ^T (requires ^T with static member One and ^T with static member op_Multiply and ^T with static member (/)) 

किसी ने मुझे बता सकते हैं, क्या निम्नलिखित बातें के बारे में कर रहे हैं?

  1. टी से पहले^(सर्कफ्लेक्स) क्या करता है?
  2. "टी" का क्या अर्थ है? क्या यह एक सामान्य प्रकार है?
  3. डबल -> क्या करता है?
  4. आवश्यक बयान क्या करता है?

मुझे आशा है कि यह एक उत्तर में कवर करने के लिए बहुत अधिक नहीं है।

उत्तर

8
  1. यह बताता है कि T एक statically resolved type parameter रूप में एक सामान्य सामान्य प्रकार पैरामीटर के लिए विरोध किया है (साथ ही नीचे 4 देखें)।
  2. हां।
  3. -> फ़ंक्शंस के लिए प्रकार का कन्स्ट्रक्टर है और सही सहयोगी है, इसलिए यह हिस्सा ^T -> (int -> ^T) के बराबर है। दूसरे शब्दों में, यदि आप इस फ़ंक्शन में ^T टाइप करने का तर्क देते हैं, तो आप int से ^T पर फ़ंक्शन वापस प्राप्त करेंगे। तो pown 2 फ़ंक्शन 2 x है जहां अभी तक बिजली पारित नहीं हुई है। और pown 2 8(pown 2) 8 जैसा ही है: यह 2 है।
  4. आमंत्रण के बिंदु पर, ^T के लिए जो भी ठोस प्रकार प्रतिस्थापित किया गया है, यह इन आवश्यकताओं को पूरा करने के लिए स्थैतिक रूप से जाना जाना चाहिए। तो आप pown 2 8 पर कॉल कर सकते हैं (क्योंकि int इन परिचालनों का समर्थन करता है), लेकिन pown "test" 8 नहीं (क्योंकि string नहीं है)।
+0

लिंक के लिए धन्यवाद, बताता है कि टी क्या करता है! –

6

वहां कुछ चीजें चल रही हैं, इसलिए शुरुआत करने वालों के लिए, मैं सुझाव दूंगा कि मैं आपको एफ # में हस्ताक्षरों से संपर्क करने का सुझाव दूंगा। सबसे पहले, circumflex को अनदेखा करें - मानसिक रूप से वहाँ एक टिक विकल्प। फिर आप "आवश्यकता" भाग को अनदेखा कर सकते हैं - लंबी कहानी छोटी, यह circumflex की वजह से है। - अपरकेस 'T एक .NET मानक, एफ # आमतौर पर उपयोग करता लोअरकेस 'a है, 'b आदि क्या इस हस्ताक्षर का वर्णन करता है एक है

// Signature: 
pown : 'T -> int -> 'T 

'T एक सामान्य प्रकार है:

तो उसके बाद आप इस प्रकार का हस्ताक्षर है फ़ंक्शन जो 'T और int लेता है, और 'T देता है। अंतिम -> के बाद का प्रकार फ़ंक्शन का "वापसी प्रकार" है - कम से कम यह शुरुआत में इसके बारे में सोचने का एक उपयोगी तरीका है।

वास्तविकता में, एक सा है कि करने के लिए और भी है - एफ में # कार्यों curried कर रहे हैं (और आंशिक रूप से डिफ़ॉल्ट रूप से लागू हो), तो क्या तुम सच में एक समारोह है कि एक 'T लेता है और हस्ताक्षर int -> 'T के एक समारोह रिटर्न है - और इस बिंदु पर यह स्पष्ट है कि आपके पास -> क्यों है।

और circumflex चीज एक स्थिर रूप से हल प्रकार है - मुझे लगता है कि @ केवीबी ने पहले से ही अधिक जानकारी दी है। यह जानना अच्छा है कि यह अस्तित्व में है, लेकिन ऐसा कुछ ऐसा है जो अभ्यास में शायद ही कभी उपयोग किया जाता है (हालांकि आप इसे मूल संख्यात्मक कार्यों और ऑपरेटरों पर देखेंगे)।

+1

कई तीर बहुत अधिक समझ में आते हैं जब यह जानकर कि कार्यों का पीछा किया जाता है, धन्यवाद! –

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