6

में 'उठाने' कार्यों के साथ भ्रम Functional Programming In Scala पुस्तक में, 'लिफ्ट' का एक उदाहरण है जहां A => B प्रकार वाला फ़ंक्शन Option[A] => Option[B] पर प्रचारित किया जाता है। '_' यहाँ क्या हैस्कैला

पहले एक है,:

इस तरह लिफ्ट कार्यान्वित किया जाता है है:

def lift[A,B](f: A => B):Option[A] => Option[B] = _ map f 

मैं इस बारे में भ्रम की एक जोड़ी है? और दूसरी, जब मैं, डीईएफ़ से वापसी प्रकार हटाने प्रकार निष्कर्ष अपना जादू मैं निम्न अपवाद प्राप्त करने के लिए उम्मीद कर रहा:

scala> def lift[A,B](f: A => B) = _ map f 
<console>:7: error: missing parameter type for expanded function ((x$1) => x$1.map(f)) 
     def lift[A,B](f: A => B) = _ map f 

किसी व्याख्या कर सकते हैं यहाँ क्या हो रहा है?

धन्यवाद

उत्तर

10
  1. lift एक समारोह एक फ़ंक्शन है। फ़ंक्शन लिफ्ट उस मान पर फ़ंक्शन f लागू करके एक मान (अनामित) लौटा। उठाए गए नाम को _ के रूप में जाना जाता है।

    def lift[A,B](f: A => B): Option[A] => Option[B] = { value => value map f } 
    
  2. कि समारोह (एक लौटाए जाने) की वापसी के प्रकार या तो स्पष्ट रूप से कहा या परोक्ष निर्धारित करने की आवश्यकता है: आप निश्चित रूप से यह एक और अधिक स्पष्ट नाम दे सकते हैं। जैसा कि संकलित लिखा गया है कि यह अनुमान लगाया जा सकता है कि क्या किया जाना है Option[B] (अधिक विशेष रूप से, lift एक फ़ंक्शन Option[A] => Option[B] (स्पष्ट रूप से बताया गया) लौटा रहा है, जबकि उस फ़ंक्शन के पास Option[B] (निश्चित रूप से निर्धारित) है। उस प्रकार की जानकारी के बिना, कंपाइलर को रिटर्न प्रकार (ओं) के कुछ अन्य संकेतों की आवश्यकता होती है।

    वैकल्पिक रूप से, lift इस प्रकार निर्धारित करें:

    def lift[A,B](f: A => B) = { value: Option[A] => value map f } 
    

    यहाँ आप स्पष्ट रूप से value के लिए प्रकार बताते हुए कर रहे हैं, और संकलक अनुमान लगा सकते हैं

    • समारोह की वापसी प्रकार Option[B] होने के लिए लौट आए, क्योंकि f: A => B नक्शा A से B,
    • के लिए वापसी प्रकार टाइप करेगाOption[A] => Option[B] होने के लिए।