2012-02-13 4 views
9

複数のパラメータリストを取るScalaのメソッドをオーバーロードする方法はありますか?例えば。私はこのようにそれを定義することができscala - カドリングされたメソッドをオーバーロードすることはできますか?

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

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

が、このような第二の方法を呼び出そうと:私はこれを行うにはしたいと思い

foo(1)(1) 

は、コンパイラがオーバーロードされた定義にあいまいな参照」文句なります"、正当化されているようです。このようなことを達成する方法はありますか?最後のパラメータは、場合によってはオプションと見なすことができます。

答えて

8

カリングのために戻り値の型が異なる2つの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!")) 
    } 
} 
関連する問題