2012-04-03 14 views
6

मैं स्काला के लिए नया हूँ, और निम्नलिखित कोड समझने की कोशिश कर(1 +) कभी भी एक समारोह कैसे हो सकता है?

scala> def w42(f: Int => Int) = f(42) //(A) 
w42: (f: Int => Int)Int 

scala> w42 (1 +)  //(B) 
res120: Int = 43 

मुझे समझ नहीं आता कि कैसे "1 +" बिंदु (बी) के रूप में विचार करना है (शुरुआत स्काला किताब में एक उदाहरण से प्राप्त) एक समारोह (1 इंट पैरामीटर लें, और एक इंट लौटाएं) जो बिंदु (ए) पर w42 परिभाषा को संतुष्ट करता है?

क्या आप कृपया उन दस्तावेजों को समझाएं या मुझे बताएं जिनके पास उत्तर है?

उत्तर

11

सरल। स्कैला 1 + 2 में 1.+(2) पर सिंटैक्स चीनी है। इसका मतलब यह है Int एक विधि + नामित कि Int स्वीकार करता है:

final class Int extends AnyVal { 
    def +(x: Int): Int = //... 
    //... 
} 

यही कारण है कि आप 1 + उपयोग कर सकते हैं जैसे कि यह एक समारोह था। कम अप्रत्याशित विधि नामकरण के साथ उदाहरण:

scala> def s42(f: String => String) = f("42") 
s42: (f: String => String)String 

scala> s42("abc".concat) 
res0: String = abc42 

BTW तकनीकी रूप से, ईटा-विस्तार एक समारोह के लिए विधि परिवर्तित करने के लिए भी शामिल है।

+4

शायद कुछ उपयोगी संकेत: '1 +' का अर्थ है '1 + _' का अर्थ है' x => 1 + x' – sschaef

+0

अतिरिक्त उदाहरण के लिए धन्यवाद टॉमसज़। उपयोगी संकेत के लिए – lastrinh1296773

+0

धन्यवाद Antoras – lastrinh1296773

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