2016-07-18 14 views
2

Versuch, zwei Methoden namens foo zu definieren, von denen eine zwei Parameterlisten enthält und die andere nur eine hat. Scheint nicht zu funktionieren:Ist es unzulässig, Methoden mit mehreren Parameterlisten zu überladen?

object Bar { 
    def foo(a: Int)(b: Int): Int = a+b 
    def foo(a: Int): Int = foo(a)(0) 
} 
error: ambiguous reference to overloaded definition, 
both method foo in object Bar of type (a: Int)Int 
and method foo in object Bar of type (a: Int)(b: Int)Int 
match argument types (Int) 
     def foo(a: Int): Int = foo(a)(0) 
          ^

??? nein, sie tun nicht ...

+0

'Bar.foo (1)' würde berufen, die von den beiden? – pedrofurla

+1

Siehe auch: https://issues.scala-lang.org/browse/SI-2383 –

+0

@ pedrofurla würde es offenbar die mit der einzigen Parameterliste aufrufen. – Dima

Antwort

4

Anstatt Ihre Funktion manuell zu überladen, könnten Sie ebenso einfach einen Standardparameter definieren. Wie die Fehlermeldung bereits sagt, ist die Referenz nicht eindeutig, daher ist sie nicht zulässig.

Hier ist Ihre Funktion mit einem Standard-Parameter:

def foo(a: Int)(b: Int = 0): Int = a+b 
+0

Ich weiß das :) Es ist nicht ganz das gleiche obwohl, denn mit dem Standardparameter, würde ich es immer noch wie 'foo (a)()' nennen, und was ich will, ist nur 'foo (a)'. – Dima