2012-02-13 16 views
9

वहाँ स्काला में तरीकों कि कई पैरामीटर सूचियों लेने ओवरलोड कोई तरीका है? जैसे मैं यह करने के लिए करना चाहते हैं:स्कैला - क्या मैं करीबी विधियों को अधिभारित कर सकता हूं?

def foo(a: Int)(b: Int)(c: Int): Int 

def foo(a: Int)(b: Int): Int 

मैं इस तरह यह परिभाषित कर सकते हैं, लेकिन इस तरह दूसरी विधि कॉल करने के लिए कोशिश कर रहा है:

foo(1)(1) 

संकलक "के बारे में अतिभारित परिभाषा को अस्पष्ट संदर्भ में शिकायत करता है ", जो उचित लगता है। क्या ऐसा कुछ हासिल करने का कोई तरीका है? कुछ मामलों में अंतिम पैरामीटर को वैकल्पिक माना जा सकता है, उदाहरण के लिए।

उत्तर

8

आप इसके लिए ओवरलोडिंग का उपयोग नहीं कर सकते हैं, क्योंकि करी के कारण दो foo विधियां केवल उनके रिटर्न प्रकार में भिन्न होती हैं।

आप इसका अनुमान लगाने के लिए स्कैला 2.8 के optional and named parameters का उपयोग कर सकते हैं, लेकिन आपको विधि को foo(1)(1)() के रूप में कॉल करना होगा। जैसे,

object Hello { 
    def foo(a : String = "Hello,") : String = a 

    def main(args: Array[String]) { 
    println(foo() + foo(" world!")) 
    } 
} 
संबंधित मुद्दे

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