2012-01-28 8 views
13

Quiero ejecutar un poco de Java en la consola de Scala. Esto es lo que sale:Scala no puede reconocer qué método llamar 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); 

Por qué Scala no puede reconocer el método a llamar, si se ha ajustado argumento es diferente, y los que me ofrecen son bastante unambigous?

Lo que es extraño, el mismo mensaje aparece también cuando intento llamar a la función con argumentos que no coinciden con ninguno de los dos conjuntos de argumentos, p. String.format()

que estaba usando Scala 2.9.1

Respuesta

13

Sus argumentos no coinciden con el prototipo de función. Está llamando a la función con el segundo argumento scala.Int que no es java.lang.Object.

Conviértalo en java.lang.Integer y funcionará.

Véase también boxing and unboxing in Scala.

+0

que enlace está lanzando un 404 –

0

Además, puede dejar Scala hacer el boxeo para usted:

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

Trate

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

-1: Duplicar respuesta. – sschaef

7

Recomiendo el uso de las nuevas interpoladores de Cuerda disponibles en Scala 2.10.X. Son más fáciles de usar.

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

sería simplemente:

val x =3 
    s"hello $x" 
Cuestiones relacionadas