为什么这段代码会抛出异常?
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)
...
我正在使用scala 2.9.1.final
答案 0 :(得分:3)
显然是编译器错误(编译器崩溃,REPL告诉你That entry seems to have slain the compiler.
)。它没有表明您的代码有任何问题。
您正在创建一个类型为AnyRef{def toInt(n: Int): Int}
的单个实例,因此创建一个像Kyle所建议的单例对象可能是更好的方法。或者创建一个您实例化的命名类/特征,它可以正常工作。
答案 1 :(得分:2)
编辑:正如Luigi Plinge所说,这是一个编译错误。
也许你想要这样的东西......
object x {
def toInt(n:Int) = n * 2
}
scala> x.toInt(2)
res0: Int = 4