2010-07-13 10 views
9

मान लीजिए मैं स्काला में एक साधारण वर्ग है:मैं स्कैला में विधियों से फ़ंक्शन ऑब्जेक्ट्स कैसे प्राप्त कर सकता हूं?

class Simple { 
    def doit(a: String): Int = 42 
} 

मैं एक वैल Function2 [सरल, स्ट्रिंग, इंट] कि दो तर्क (लक्ष्य सरल वस्तु, स्ट्रिंग तर्क) लेता है में कैसे जमा कर सकते हैं, और क्या कॉल कर सकते हैं() मुझे परिणाम वापस प्राप्त करें?

उत्तर

14
val f: Function2[Simple, String, Int] = _.doit(_) 
+1

"आंशिक अनुप्रयोग" के संयोजन के संयोजन से कवर किया गया है। जैसा कि यहां दिखाया गया है यह एक विशेष मामला है। जैसा कि नाम से पता चलता है, कुछ तर्क आंशिक अनुप्रयोग में आपूर्ति की जा सकती हैं और परिणामी कार्य में धर्मार्थ एन-एम है जहां एन मूल विधि (या कार्य) की धैर्य थी और एम आंशिक अनुप्रयोग में तय तर्कों की संख्या है। –

+0

बिल्कुल सही। मैं सोच रहा था कि संकलक कैसे पता लगाएगा कि क्या विधि विधि वास्तव में मौजूद है या नहीं; मैं देखता हूं कि स्पष्ट टाइपिंग यहां चाल करता है। धन्यवाद! –

12

sepp2k के रूप में ही, बस एक और वाक्य रचना

val f = (s:Simple, str:String) => s.doit(str) 
9

का उपयोग कर आप के बीच में उन है कि टाइपिंग प्रकार पसंद नहीं है के लिए: किसी भी के लिए के लिए _ कार्यों से

scala> val f = (_: Simple).doit _ 
f: (Simple) => (String) => Int = <function1> 

एक विधि के बाद arity:

scala> trait Complex {       
    | def doit(a: String, b: Int): Boolean 
    | }          
defined trait Complex 

scala> val f = (_: Complex).doit _    
f: (Complex) => (String, Int) => Boolean = <function1> 

यह §6.23 "बेनामी कार्यों के लिए प्लेसहोल्डर सिंटेक्स" और §7.1 Scala Reference

+0

प्रकार (सरल) => (स्ट्रिंग) => इंट बनाम प्रकार (सरल, स्ट्रिंग) => Int? के कार्य करने के व्यावहारिक प्रभाव क्या हैं? मुझे पता है कि पूर्व को एफ (ओबीजे) ("स्ट्र") और बाद वाला एफ (ओबीजे, "स्ट्र") के साथ बुलाया जाता है, और पूर्व एक अन्य फ़ंक्शन ऑब्जेक्ट देता है अगर इसे केवल एक पैरामीटर सूची के साथ कॉल करें: f (obj)। लेकिन बनाई गई वस्तुओं की संख्या और विधि आमंत्रण की संख्या के संदर्भ में दृश्यों के पीछे क्या होता है? –

+0

एक फंक्शन 2 ऑब्जेक्ट की बजाय दो फंक्शन 1 ऑब्जेक्ट्स को एक अतिरिक्त स्तर के संकेत के साथ बनाया गया है। – retronym

संबंधित मुद्दे

 संबंधित मुद्दे