定义我自己的toInt方法时scala中的异常

时间:2012-03-15 01:26:24

标签: scala exception

为什么这段代码会抛出异常?

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

2 个答案:

答案 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