/ / स्काला फ़ंक्शन परिभाषा पैरामीटर सूची में अलग-अलग ब्रैकेट शैली - फ़ंक्शन, स्काला, कार्यात्मक-प्रोग्रामिंग, उच्च-क्रम-फ़ंक्शन

स्कैला फ़ंक्शन परिभाषा पैरामीटर सूची पर विभिन्न ब्रैकेट शैली - फ़ंक्शन, स्कैला, कार्यात्मक-प्रोग्रामिंग, उच्च-ऑर्डर-फ़ंक्शंस

स्काला में निम्नलिखित दो फ़ंक्शन परिभाषाओं का क्या अंतर है:

1) def sum(f: Int => Int)(a: Int, b: Int): Int = { <code removed> }

2) def sum(f: Int => Int, a: Int, b: Int): Int = { <code removed> }

?

SBT का कंसोल REPL उनके लिए अलग मूल्य देता है इसलिए लगता है कि वे किसी तरह अलग हैं:

sum: (f: Int => Int, a: Int, b: Int)Int

sum: (f: Int => Int)(a: Int, b: Int)Int

उत्तर:

उत्तर № 1 के लिए 4

पहली परिभाषा है curried, ताकि आप प्रदान कर सकें a तथा b किसी और समय।

उदाहरण के लिए, यदि आप उस फ़ंक्शन को जानते हैं जिसे आप वर्तमान विधि में उपयोग करना चाहते हैं, लेकिन "अभी तक तर्क नहीं जानते हैं, तो आप इसे ले सकते हैं:

def mySum(v: Int): Int = v + 1
val newsum = sum(mySum) _

इस समय, newsum एक ऐसा फंक्शन है जो दो लेता है Intएस और रिटर्न ए Int.

संक्षेप के संदर्भ में यह नहीं लगता हैबहुत समझदारी; हालाँकि, बहुत बार ऐसा हुआ है कि मैं किसी प्रोग्राम के कुछ हिस्सों के लिए अलग-अलग एल्गोरिदम को वापस करना चाहता हूं जो मुझे अभी पता है, लेकिन अभी तक मापदंडों को नहीं जानते (या पहुंच है)

करी आपको वह सुविधा देता है।


जवाब के लिए 2 № 2

स्केल फ़ंक्शंस करीने में सहायता के लिए कई पैरामीटर सूचियों का समर्थन करते हैं। अपने पहले उदाहरण से, आप पहले देख सकते हैं sum एक के रूप में कार्य करता है जो दो पूर्णांक लेता है और एक अन्य फ़ंक्शन (यानी) देता है करी) जो तब एक ले सकता है Int => Int एक तर्क के रूप में कार्य करें।

इस सिंटैक्स का उपयोग फ़ंक्शंस बनाने के लिए भी किया जाता है जो नए सिंटैक्स के रूप में दिखते हैं और व्यवहार करते हैं। उदाहरण के लिए, def withResource(r: Resource)(block: => Unit) कहा जा सकता है:

withResource(res) {
..
..
}