2012-01-28 19 views
13

Chcę uruchomić trochę Java w konsoli Scala. Oto co mam:Scala nie może rozpoznać, którą metodę wywołać

scala> String.format("hello %d",3); 
<console>:8: error: overloaded method value format with alternatives: 
    (java.util.Locale,java.lang.String,<repeated...>[java.lang.Object])java.lang.String <and> 
    (java.lang.String,<repeated...>[java.lang.Object])java.lang.String 
cannot be applied to (java.lang.String, Int) 
       String.format("hello %d",3); 

Dlaczego Scala nie może rozpoznać, która metoda aby zadzwonić, jeśli zestaw argument jest inny, a te które dostarczają są dość jednoznaczna?

Co jest dziwne, ten sam komunikat pojawia się również, gdy próbuję wywołać funkcję z argumentami, które nie pasują do żadnego z obu zestawów argumentów, np. String.format()

używałem Scala 2.9.1

Odpowiedz

13

Twoje argumenty nie pasują prototyp funkcji. Wywołujesz funkcję z drugim argumentem scala.Int, który nie jest java.lang.Object.

Konwersja na java.lang.Integer i będzie działać.

Zobacz także boxing and unboxing in Scala.

+0

linkujące rzuca 404 –

0

Ponadto, można pozwolić Scala zrobić boks dla Ciebie:

String.format("hello %d", 3: Integer) 
1

Spróbuj

String.format("hello %d",3.asInstanceOf[java.lang.Object]); 
+1

-1: Duplikat odpowiedź. – sschaef

7

polecam korzystania z nowych interpolatorami String dostępne w wersji 2.10.x. Scala Są łatwiejsze w użyciu.

val x = 3 
    String.format("hello %d", x: Integer) 

byłoby po prostu:

val x =3 
    s"hello $x" 
Powiązane problemy