2010-12-13 9 views
5

एक साधारण सवाल ... क्या टुपल्स के माध्यम से 1 से अधिक पैरामीटर स्वीकार करने वाले फ़ंक्शन को परिभाषित करना अच्छा अभ्यास है?एफ # कार्यों में पैरामीटर परिभाषित करना, क्या यह टुपल्स का बेहतर उपयोग कर रहा है?

मैं अपने आप को बेहतर व्याख्या करते हैं:

let myfunc par1 par2 = ...;; 

यह करने के लिए अच्छा तो है: मैं एक समारोह है?

let myfunc (par1, par2) = ...;; 

जब मैं कहता हूं कि "यह अच्छा है" मैं कह रहा हूं: क्या यह अच्छा अभ्यास है? क्या यह हमेशा एक समारोह में पैरामीटर पारित करने के लिए एक सामान्य अभ्यास के रूप में ऐसा करने के लिए अच्छा है ??

धन्यवाद

उत्तर

5

सामान्य एफ # शैली कार्यों curried परिभाषित करने के लिए है, यानी अपना पहला उदाहरण के अनुसार गैर tupled है। यदि आप,, एफ # के अलावा अन्य भाषाओं नेट के लिए tupling साथ छड़ी अपने कोड का पर्दाफाश के बाद से यह सिवाय curried कार्यों कॉल करने के लिए मुश्किल है, ("आंशिक आवेदन")

let myfunc par1 par2 = ... 
let myfuncHello = myfunc "Hello" 
myfuncHello "World" // same as: myfunc "Hello" "World" 

हालांकि:

Currying आप यह कर देता है एफ # से।

संपादित करें: नया एफ # स्निपेट्स साइट से: http://fssnip.net/I

+0

आह ठीक है ... अब मैं देख सकता हूँ जहाँ उपयोगी tupled अंकन एक सवाल खेद है ... आह: तो पहले अंकन currying कहा जाता है? (मैं अभी भी आपका जवाब स्वीकार नहीं कर सकता क्योंकि मुझे 5 मिनट का इंतजार करना होगा :))। – Andry

+1

यह सही है: पहली टिप्पणी में, आपने एक करीबी कार्य परिभाषित किया है; myfunc curried है। जब आप इसे मेरे उत्तर में करते हैं, तो आपने आंशिक रूप से इसे लागू किया है। ये शर्तें आमतौर पर भ्रमित होती हैं: http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application –

+0

हाँ मैंने इसे ठीक पहले पढ़ा है, यह बहुत अच्छा करी है ... बहुत बहुत धन्यवाद। – Andry