2012-02-13 48 views
9

有沒有辦法在Scala中重載多個參數列表中的方法?例如。我想這樣做:scala - 我可以重載咖喱方法嗎?

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

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

我可以定義它像這樣,但試圖調用這樣的第二種方法:

foo(1)(1) 

使編譯器抱怨「曖昧參考超載定義「,這似乎是有道理的。有沒有辦法實現這樣的事情?例如,在某些情況下,最後一個參數可能被認爲是可選的。

回答

8

您不能爲此使用重載,因爲由於咖啡因的影響,只有兩種foo方法的返回類型不同。

您可以使用Scala 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!")) 
    } 
}