मैं नियमों पर थोड़ी कमजोर हूं कि जब आपको फ़ंक्शन के रूप में उपयोग करने के लिए _
की आवश्यकता होती है। उदाहरण के लिए, निम्नलिखित में Foo
और Nil
के ::
के बीच कोई अंतर क्यों है?मुझे _ के साथ विधि नाम का पालन करने की आवश्यकता क्यों है?
def square(n: Int) = n * n
object Foo { def ::(f: Int => Int) = f(42) }
// ...
scala> Foo.::(square)
res2: Int = 1764
scala> Nil.::(square)
<console>:6: error: missing arguments for method square in object $iw;
follow this method with `_' if you want to treat it as a partially applied function
Nil.::(square)
^
scala> Nil.::(square _)
res3: List[(Int) => Int] = List(<function1>)
धन्यवाद। स्काला भाषा स्पेक का सिर्फ एक हिस्सा मिला जो स्कैला 2.0 के लिए परिवर्तन नोट्स में "क्यों" के लिए कुछ औचित्य देता है: "कार्यों के लिए विधियों के पूर्ण रूपांतरण के नियम (§6.25) को कड़ा कर दिया गया है। पहले, एक पैरामीटरयुक्त विधि का उपयोग किया गया था क्योंकि एक मान हमेशा एक समारोह में रूपांतरित हो गया था। इससे अप्रत्याशित परिणाम हो सकते हैं जब विधि तर्क कहां भूल गए हैं। उदाहरण के लिए नीचे दिए गए कथन पर विचार करें: दिखाएं (x.toString) ... " –