2015-03-07 4 views
7

मैं एक कोडस्कैला में डबल विधि ब्रैकेट का उद्देश्य क्या है?

object App { 
    def main(args: Array[String]) = print {CL().f()()()} 
} 

case class CL() { 
    def f()()() = 1 
} 

है आप देख सकते हैं एक विधि कॉल f()()()। लेकिन अगर मैं f() निष्पादित करता हूं तो यह वही परिणाम देता है।

तो स्केल में f()()() और f() के बीच क्या अंतर है?

उत्तर

10

स्काला में, तरीकों कई पैरामीटर सूचियां हो सकती हैं:

def f(x: Int)(y: Int, z: String)(w: Boolean) = "foo" 
f(1)(2, "bar")(true) //returns "foo" 

एकाधिक पैरामीटर सूचियों कई कारणों से उपयोगी होते हैं। आप this प्रश्न पर उनके बारे में अधिक पढ़ सकते हैं।

इसके अलावा स्काला में, एक खाली तर्क सूची वैकल्पिक रूप से छोड़े गए किया जा सकता है:

def f() = "foo" 
f //returns "foo" 

एक खाली पैरामीटर सूची का उपयोग करने का विकल्प आम तौर पर सम्मेलन से नियंत्रित होता है, के रूप में this सवाल में विस्तार से बताया।

तो, अगर आप एक से अधिक खाली तर्क सूचियों है, तो आप उनमें से किसी को भी हटा सकते हैं:

def f()()() = "foo" 
f()()() //returns "foo" 
f()() //returns "foo" 
f() //returns "foo" 
f //returns "foo" 
+0

यह एक currying है? – barbara

+0

हां, एकाधिक पैरामीटर सूचियां करी का एक रूप है। स्कैला में करी के बारे में और पढ़ें: http://www.codecommit.com/blog/scala/function-currying-in-scala –

+0

मैं इसे पढ़ूंगा, धन्यवाद। – barbara

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