Tuesday 15 January 2013

type inference - Confusion with 'lifting' functions in Scala -


पुस्तक में, 'लिफ्ट' का एक उदाहरण है जहां एक प्रकार के साथ एक समारोह A = & gt; बी को बढ़ावा दिया जाता है विकल्प [ए] = & gt; विकल्प [बी]

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

  def लिफ्ट [ए, बी] (एफ: ए = & gt; बी): विकल्प [ए] = & gt; विकल्प [बी] = _ नक्शा f   

मेरे पास इसके बारे में कुछ भ्रम हैं:

पहले एक है, यहां '_' क्या है? और दूसरी बात, जब मैं वापसी प्रकार को डीईफ़ से निकाल देता हूं, तो उसके जादू को करने के लिए प्रकार-अनुमान की उम्मीद है, मुझे निम्नलिखित अपवाद मिलता है:

  scala & gt; डिफ लिफ्ट [ए, बी] (एफ: ए = & gt; बी) = _ नक्शा f & lt; कंसोल & gt;: 7: त्रुटि: विस्तारित फ़ंक्शन के लिए पैरामीटर प्रकार लापता ((x $ 1) => x $ 1.map (f)  

धन्यवाद

<

  1. लिफ्ट एक फ़ंक्शन है जो फ़ंक्शन देता है। फ़ंक्शन लिफ्ट एक मूल्य (अनाम) को फ़ंक्शन f को उस मान पर लौटाता है उठाए जाने वाले अनाम नाम को _ के रूप में संदर्भित किया जाता है। आप इसे निश्चित रूप से अधिक स्पष्ट नाम दे सकते हैं:

      def लिफ्ट [ए, बी] (एफ: ए = & gt; बी): विकल्प [ए] = & gt; विकल्प [बी] = {मान = & gt; मूल्य का नक्शा f}    
  2. उस फ़ंक्शन का वापसी प्रकार (जो वापस किया जा रहा है) को या तो स्पष्ट रूप से वर्णित किया जाना चाहिए या निहित रूप से निर्धारित किया जाना चाहिए। लिखित रूप में लिखी गई संकलन का अनुमान लगाया जा सकता है कि एक विकल्प [बी] (अधिक विशेष रूप से, लिफ्ट फ़ंक्शन वापस कर रहा है विकल्प [ए] = & gt ; विकल्प [बी] (स्पष्ट रूप से कहा गया है), जबकि उस फ़ंक्शन का रिटर्न टाइप ऑप्शन [बी] है (निहित निहित))। उस प्रकार की जानकारी के बिना, संकलक को किसी अन्य संकेत की आवश्यकता होती है कि वापसी का प्रकार क्या है।

    वैकल्पिक रूप से, लिफ्ट को परिभाषित करें:

      डीईफ़ लिफ्ट [ए, बी] (एफ: ए = & gt; बी) = {मान: विकल्प [ए] = & gt; मान नक्शा f}   

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

    • वापसी फ़ंक्शन का प्रकार विकल्प [बी] पर लौटा, क्योंकि f: A = & gt; बी को से बी ,
    • लिफ्ट के लिए वापसी का प्रकार होगा विकल्प [ए] = & gt; विकल्प [बी]

No comments:

Post a Comment