2012-03-15 12 views
7

¿Por qué este código arroja una excepción?Excepción en scala al definir mi propio método toInt

val x = new { def toInt(n: Int) = n*2 } 
x.toInt(2) 
scala.tools.nsc.symtab.Types$TypeError: too many arguments for method toInteger: (x$1: java.lang.Object)java.lang.Integer 
     at scala.tools.nsc.typechecker.Contexts$Context.error(Contexts.scala:298) 
     at scala.tools.nsc.typechecker.Infer$Inferencer.error(Infer.scala:207) 
     at scala.tools.nsc.typechecker.Infer$Inferencer.errorTree(Infer.scala:211) 
     at scala.tools.nsc.typechecker.Typers$Typer.tryNamesDefaults$1(Typers.scala:2350) 
     ... 

estoy usando Scala 2.9.1.final

+0

Dado que es un error del compilador, recomiendo mejorar Scala presentando un informe de error en [rastreador de problemas de Scala] (https://issues.scala-lang.org/secure/Dashboard.jspa). – leedm777

+0

No se bloquea en el tronco 2.10. – soc

Respuesta

3

Es evidente que un compilador de errores (se bloquea el compilador, y le dice REPL That entry seems to have slain the compiler.). No está indicando que haya algo mal con tu código.

Está creando una sola instancia del tipo AnyRef{def toInt(n: Int): Int}, por lo que crear un objeto singleton como sugiere Kyle podría ser una mejor manera de solucionarlo. O crea una clase/rasgo con nombre que insistan, que funciona bien.

2

EDIT: Como sugirió Luigi Plinge, es un error del compilador.

Tal vez usted quiere algo como esto ...

object x { 
    def toInt(n:Int) = n * 2 
} 

scala> x.toInt(2) 
res0: Int = 4 
+0

¿Qué quiere decir con "scalas toInt"? new {} no tiene un método toInt que pueda anular. Solo estoy el método toInt que definí. – SpiderPig

Cuestiones relacionadas