मैं एक स्कैला फ़ंक्शन करना चाहता हूं जो किसी अन्य फ़ंक्शन का संदर्भ देता है, क्या यह संभव है?स्कैला: फ़ंक्शन का संदर्भ
उत्तर
आप एक फ़ंक्शन प्रकार वापस कर सकते हैं (यह A => B
द्वारा परिभाषित किया गया है)। इस मामले में Int Int:
scala> def f(x:Int): Int => Int = { n:Int => x + n }
f: (x: Int)(Int) => Int
जब आप फ़ंक्शन को कॉल करते हैं तो आपको एक नया फ़ंक्शन मिलता है।
scala> f(2)
res1: (Int) => Int = <function1>
जो एक सामान्य समारोह के रूप में कहा जा सकता है:
scala> res1(3)
res2: Int = 5
एक तरह से (कुछ कार्यात्मक वस्तु उन्मुखीकरण के लिए अद्वितीय) आप उच्च आदेश कार्यों का उपयोग कर सकते हैं वस्तुओं के बीच ढीला कपलिंग्स तैयार करना है।
नीचे दिए गए उदाहरण में Alarm
में एक विधि check4Danger()
है जो जांच करता है कि गणना की गई मान DangerLevel
से अधिक है या नहीं। अलार्म क्लास उन वस्तुओं के बारे में कुछ नहीं जानता जो इसे कॉल करते हैं।
Car
कक्षा में एक विधि engineCrashRisk()
है जो एक अज्ञात फ़ंक्शन देता है जो इंजन क्रैश के जोखिम की गणना करता है। Car
अलार्म की निर्भरता नहीं है।
case class Alarm(temperature: Double, pressure: Double){
val DangerLevel = 100000.0
def check4Danger(f: (Double, Double) => Double): Boolean = {
val risk = f(temperature, pressure)
if(risk > DangerLevel){
println("DANGER: "+ risk)
true
}else{
println("Safe: " + risk)
false
}
}
}
case class Car(fuelRate: Double, milage: Int){
def engineCrashRisk() =
(temperature: Double, pressure: Double) =>
temperature * milage + 2*pressure/fuelRate
}
val car = Car(0.29, 123)
val riskFunc = car.engineCrashRisk
val alarm = Alarm(124, 243)
val risk = alarm.check4Danger(riskFunc)
इस स्क्रिप्ट का आउटपुट है:
Safe: 16927.862068965518
इस उदाहरण में हम Alarm
और Car
वस्तुओं के बीच निर्भरता मुक्त विधि कॉल बनाने के लिए बंद होने के साथ गुमनाम कार्यों के लिए इस्तेमाल किया। क्या यह उदाहरण कोई समझ में आता है?
- 1. स्कैला: "फ़ंक्शन का उपयोग"
- 2. कन्स्ट्रक्टर फ़ंक्शन का संदर्भ
- 3. स्कैला बंद संदर्भ
- 4. स्कैला विधि और फ़ंक्शन सिंटैक्स का अवलोकन
- 5. स्कैला: फ़ंक्शन रिटर्निंग विकल्प का चयन करना आंशिक फ़ंक्शन
- 6. स्कैला फ़ंक्शन बनाम क्लास डिचोटोमी
- 7. एक चर में एक फ़ंक्शन का संदर्भ?
- 8. स्कैला फ़ंक्शन वेरिएंस और ओवरराइडिंग
- 9. स्कैला में लागू फ़ंक्शन क्या है?
- 10. संदर्भ द्वारा स्कैला कॉल कर सकते हैं?
- 11. फ़ंक्शन संदर्भ के लिए साइट
- 12. pydev: फ़ंक्शन के सभी संदर्भ
- 13. संदर्भ चर और वर्चुअल फ़ंक्शन
- 14. स्कैला - गैर-फ़ंक्शन प्रकारों पर फ़ंक्टर का उपयोग कैसे करें?
- 15. स्कैला में आंशिक फ़ंक्शन का डोमेन कैसे प्राप्त करें?
- 16. स्कैला
- 17. शेयरपॉइंट परिकलित फ़ील्ड फ़ंक्शन संदर्भ
- 18. स्कैला जेनेरिक फ़ंक्शन मान (बेनामी फ़ंक्शन) - गुम पैरामीटर प्रकार (त्रुटि)
- 19. स्कैला - एक मूल गतिशील फ़ंक्शन पार्सर
- 20. स्कैला: फ़ंक्शन/विधि एप्लिकेशन और टुपल्स
- 21. स्कैला ऋण पैटर्न, वैकल्पिक फ़ंक्शन पैरा
- 22. स्कैला
- 23. स्कैला
- 24. किसी सरणी में फ़ंक्शन का संदर्भ क्या है?
- 25. संदर्भ में फ़ंक्शन का स्टोर वापसी मूल्य C++
- 26. स्कैला
- 27. क्या स्कैला में फ़ंक्शन के भीतर से फ़ंक्शन का नाम पुनर्प्राप्त करना संभव है?
- 28. स्कैला
- 29. स्कैला
- 30. स्कैला
+ 1, ऑफटॉपिक एक तरफ: कृपया 'DANGER_LEVEL' को 'डेंजरलेवल' में बदलें। ओडर्स्की पुस्तक स्थिरांक के लिए पास्कलकेस के उपयोग की सिफारिश करती है। – missingfaktor
@ Rahuλ कोई बकवास नहीं! यह सिफारिश पूरी तरह से अपरंपरागत महसूस करती है, लेकिन मैं अपने महान नेता की इच्छा पर सवाल करने के लिए कौन हूं :-) –