Исключение в scala при определении моего собственного метода toInt - PullRequest
7 голосов
/ 15 марта 2012

Почему этот код вызывает исключение?

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 ]

3 голосов
/ 15 марта 2012

Ясно, что ошибка компилятора (компилятор падает, и REPL сообщает вам That entry seems to have slain the compiler.). Это не означает, что с вашим кодом что-то не так.

Вы создаете один экземпляр типа AnyRef{def toInt(n: Int): Int}, поэтому создание одноэлементного объекта, как предполагает Кайл, может быть лучшим способом решения этой проблемы. Или создайте именованный класс / черту, которую вы опровергаете, которая отлично работает.

2 голосов
/ 15 марта 2012

РЕДАКТИРОВАТЬ: Как предложил Луиджи Плинге, это ошибка компилятора.

Может быть, вы хотите что-то вроде этого ...

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

scala> x.toInt(2)
res0: Int = 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...