गणितज्ञ तो बजाय कहा, "तो हम गुजर समारोह f
फोन यह x
एक पैरामीटर के रूप में" अपने स्वयं के छोटे से अजीब तरीके हैं, जैसा कि हम कह सकते हैं कि प्रोग्रामर, वे "अपने तर्क x
को समारोह f
लागू करने" के बारे में बात करते हैं।
गणित और कंप्यूटर विज्ञान में, लागू एक ऐसा फ़ंक्शन है जो तर्कों के लिए फ़ंक्शन लागू करता है।
Wikipedia
apply
स्काला में वस्तु उन्मुख और कार्यात्मक मानदंड के बीच की खाई को बंद करने के उद्देश्य में कार्य करता। स्कैला में प्रत्येक कार्य को एक वस्तु के रूप में दर्शाया जा सकता है। प्रत्येक फ़ंक्शन में ओओ प्रकार भी होता है: उदाहरण के लिए, एक फ़ंक्शन जो Int
पैरामीटर लेता है और Int
देता है ओओ प्रकार Function1[Int,Int]
होगा।
// define a function in scala
(x:Int) => x + 1
// assign an object representing the function to a variable
val f = (x:Int) => x + 1
सब कुछ के बाद से स्काला f
में एक वस्तु अब Function1[Int,Int]
वस्तु के लिए एक संदर्भ के रूप में इलाज किया जा सकता है।उदाहरण के लिए, हम, toString
विधि Any
से विरासत में मिली, कि एक शुद्ध समारोह के लिए असंभव होता कॉल कर सकते हैं क्योंकि कार्यों के तरीकों की जरूरत नहीं है:
f.toString
या हम f
पर compose
विधि को फोन करके एक और Function1[Int,Int]
वस्तु निर्धारित कर सकते हैं और दो अलग अलग कार्यों को एक साथ चेनिंग:
val f2 = f.compose((x:Int) => x - 1)
अब अगर हम वास्तव में समारोह निष्पादित करने के लिए चाहते हैं, या गणितज्ञ के रूप में कहते हैं कि "अपने तर्कों को एक समारोह लागू" हमपर apply
विधि कहेंगेवस्तु:
f2.apply(2)
f.apply(args)
हर बार जब आप एक समारोह एक वस्तु के रूप में प्रतिनिधित्व पर अमल करना चाहते लेखन वस्तु उन्मुख तरीका है, लेकिन ज्यादा अतिरिक्त जानकारी के जोड़े बिना कोड के लिए अव्यवस्था का एक बहुत जोड़ना होगा और यह होगा f(args)
जैसे अधिक मानक नोटेशन का उपयोग करने में सक्षम होना अच्छा है। यही वह जगह है जहां स्कैला कंपाइलर कदम उठाता है और जब भी हमारे पास फ़ंक्शन ऑब्जेक्ट में f
संदर्भ होता है और प्रस्तुति फ़ंक्शन पर तर्क लागू करने के लिए f (args)
लिखता है तो संकलक चुपचाप ऑब्जेक्ट विधि कॉल f.apply (args)
पर f (args)
का विस्तार करता है।
स्कैला में प्रत्येक फ़ंक्शन को ऑब्जेक्ट के रूप में माना जा सकता है और यह दूसरी तरफ भी काम करता है - प्रत्येक ऑब्जेक्ट को फ़ंक्शन के रूप में माना जा सकता है, बशर्ते इसमें apply
विधि हो। इस तरह की वस्तुओं समारोह अंकन में इस्तेमाल किया जा सकता:
// we will be able to use this object as a function, as well as an object
object Foo {
var y = 5
def apply (x: Int) = x + y
}
Foo (1) // using Foo object in function notation
कई उपयोग मामलों रहे हैं जब हम एक समारोह के रूप में एक वस्तु के इलाज के लिए चाहते हैं। सबसे आम परिदृश्य factory pattern है।
List(1,2,3) // same as List.apply(1,2,3) but less clutter, functional notation
// the way the factory method invocation would have looked
// in other languages with OO notation - needless clutter
List.instanceOf(1,2,3)
तो apply
विधि बस के बीच की खाई को बंद करने के एक आसान तरीका है: इसके बजाय तर्क का एक सेट करने के लिए एक कारखाने विधि हम apply
वस्तु कर सकते हैं का उपयोग कर एक संबद्ध वर्ग का एक नया उदाहरण बनाने के लिए कोड के लिए अव्यवस्था को जोड़ने का स्कैला में कार्य और वस्तुओं।
यहां तक कि एक त्वरित googling भी बहुत सारे लाता है अच्छा लेख यहां एक है: http://jackcoughonsoftware.blogspot.com/2009/01/deeper-look-at-apply-method-in-scala.html –
http://stackoverflow.com/questions/1223834/how-does- स्केलस-लागू-विधि-जादू-कार्य – ses
वास्तव में यह जावा/सी ++ में एक निर्माता के समान है लेकिन मान वापस कर सकता है और 'लागू' नाम – ses