आपकी धारणा सही है, इस मामले में, कार्य बिल्कुल वही हैं।
आप जेनरेट किए गए आईएल कोड (जैसा कि क्रेग द्वारा दिखाया गया है) का निरीक्षण करके देख सकते हैं और आप यह भी देख सकते हैं कि एफ # कंपाइलर द्वारा अनुमानित प्रकार को देखकर। दोनों मामलों में, आप int -> int -> int
देखेंगे। एफ # भाषा का विचार है कि एक समारोह के रूप में int
लेता है और int -> int
देता है लेकिन यह वास्तव में कई तर्कों (दक्षता के लिए) के साथ एक विधि के रूप में संकलित किया जाता है।
आप fun
लिखने के तुरंत बाद let .. =
तो संकलक बदल जाता है एक मानक समारोह में कि। हालांकि, अगर आप यदि आप समारोह लौटने से पहले कुछ गणना कर कोड है कि थोड़ी-सी अलग है लिख सकते हैं:
let f1 a b = printfn "hi"; a + b
let f2 a = printfn "hi"; (fun b -> a + b)
अब दो कार्य बहुत अलग हैं, क्योंकि एक दूसरे प्रिंट "नमस्ते" जब आप यह सिर्फ एक देना
> let f = f2 1;;
hi // The body is called, prints
val f : (int -> int) // and returns function
> f 2;; // This runs the body of 'fun'
val it : int = 3 // which performs the additiion
आप एक ही कोड f1
का उपयोग कर लिख सकते हैं, लेकिन पहले आदेश सिर्फ एक नया कार्य पैदा करेगा और दूसरा आदेश प्रिंट "नमस्ते" होगा: एकल तर्क (और फिर इसे एक समारोह है कि आप कॉल कर सकते हैं देता है) और जोड़ो।
इस मामले में, f2
के लिए जेनरेट किया गया आईएल कोड अलग होगा। यह एक ऐसा कार्य होगा जो एक फ़ंक्शन (प्रकार FSharpFunc<int, int>
) देता है। एफ # द्वारा प्रदर्शित प्रकार भी अलग है - int -> int -> int
के बजाय यह int -> (int -> int)
होगा। आप इन दो प्रकारों के मूल्यों का बिल्कुल उसी तरीके से उपयोग कर सकते हैं, लेकिन यह आपको संकेत देता है कि जब आप इसे एक ही तर्क देते हैं तो पहला प्रभाव कुछ प्रभाव डाल सकता है।
स्रोत
2012-10-30 13:05:46
[मेरा जवाब यहां देखें] (http://stackoverflow.com/questions/2175940/int-int-int-what-does-this-mean-in-f/2176428#2176428), आपको समझने में मदद कर सकता है अंतर –
मैंने उत्तर से तीसरे मामले को रखने के लिए प्रश्न बढ़ाया। – hyde