2012-03-15 65 views
7

爲什麼此代碼會拋出異常?在定義我自己的toInt方法時scala中的異常

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

由於這是一個編譯器錯誤,我建議通過在[Scala的問題跟蹤器](https://issues.scala-lang.org/secure/Dashboard.jspa)中提交錯誤報告來更好地製作Scala。 – leedm777 2012-03-15 18:30:09

+0

不會在2.10中繼上崩潰。 – soc 2012-03-16 00:22:59

回答

3

顯然編譯器錯誤(編譯器崩潰,並REPL告訴你That entry seems to have slain the compiler.)。這並不是說你的代碼有什麼問題。

您正在創建類型爲AnyRef{def toInt(n: Int): Int}的單個實例,因此按照Kyle的建議創建單例對象可能是更好的方法。或者創建一個你命名的class/trait,它工作正常。

2

編輯:作爲路易吉Plinge建議,這是一個編譯器錯誤。

也許你想這樣的事情...

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

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

「scalas toInt」是什麼意思? new {}沒有可以覆蓋的toInt方法。只有我定義的toInt方法。 – SpiderPig 2012-03-15 02:27:36

相關問題