सीखने के दौरान मेरे पास यह सवाल बहुत था और तब से इसे कई बार पूछा जा चुका है। सबसे आसान तरीका मैं अंतर का वर्णन कर सकता हूं कि दोनों एक ही हैं :) मुझे समझाने दें ... स्पष्ट रूप से अंतर हैं।
आंशिक आवेदन और क्यूरिंग दोनों में एक फ़ंक्शन के लिए तर्क की आपूर्ति शामिल है, शायद एक बार में सभी नहीं। एक निष्पक्ष विहित उदाहरण दो संख्याओं को जोड़ रहा है। छद्मकोड (वास्तव में बिना कीवर्ड के JS) में, आधार फ़ंक्शन निम्नलिखित हो सकता है:
add = (x, y) => x + y
अगर मुझे "addOne" फंक्शन चाहिए, तो मैं इसे आंशिक रूप से लागू कर सकता हूं या इसे कर सकता हूं:
addOneC = curry(add, 1)
addOneP = partial(add, 1)
अब उनका उपयोग करना स्पष्ट है:
addOneC(2) #=> 3
addOneP(2) #=> 3
तो क्या अंतर है? ठीक है, यह सूक्ष्म है, लेकिन आंशिक आवेदन में कुछ तर्कों की आपूर्ति करना शामिल है और लौटाया गया फ़ंक्शन फिर अगले आह्वान पर मुख्य कार्य को अंजाम देगा, जबकि करी तब तक इंतजार करता रहेगा जब तक कि सभी तर्क आवश्यक न हों:
curriedAdd = curry(add) # notice, no args are provided
addOne = curriedAdd(1) # returns a function that can be used to provide the last argument
addOne(2) #=> returns 3, as we want
partialAdd = partial(add) # no args provided, but this still returns a function
addOne = partialAdd(1) # oops! can only use a partially applied function once, so now we're trying to add one to an undefined value (no second argument), and we get an error
संक्षेप में, कुछ मूल्यों को प्रीफ़िल करने के लिए आंशिक अनुप्रयोग का उपयोग करें, यह जानते हुए कि अगली बार जब आप विधि को कॉल करते हैं, तो यह निष्पादित करेगा, सभी अपरिष्कृत तर्कों को अपरिभाषित छोड़ देगा; जब आप फ़ंक्शन हस्ताक्षर को पूरा करने के लिए आवश्यक रूप से आंशिक रूप से लागू फ़ंक्शन को लगातार वापस करना चाहते हैं तो करीने का उपयोग करें। एक अंतिम वंचित उदाहरण:
curriedAdd = curry(add)
curriedAdd()()()()()(1)(2) # ugly and dumb, but it works
partialAdd = partial(add)
partialAdd()()()()()(1)(2) # second invocation of those 7 calls fires it off with undefined parameters
उम्मीद है की यह मदद करेगा!
अद्यतन: कुछ भाषाएं या कार्यकारी कार्यान्वयन आपको आंशिक आवेदन कार्यान्वयन के लिए एक समता (अंतिम मूल्यांकन में तर्क की कुल संख्या) को पारित करने की अनुमति देंगे जो मेरे दो विवरणों को एक भ्रमित गड़बड़ में डाल सकता है ... लेकिन उस बिंदु पर, दो तकनीकें हैं काफी हद तक विनिमेय।