В Scala меня невероятно смущает это довольно тавтологическое сообщение об ошибке:
java.lang.ClassCastException: FOO cannot be cast to FOO
Я ожидаю, что кто-то всегда может быть приведен к своему типу.
Контекст
Я пытаюсь запустить следующую оболочку вокруг компилятора scala, расположенную по адресу http://code.google.com/p/rooscaloo/source/browse/trunk/rooscaloo/src/org/darevay/rooscaloo/Interpreter.scala К сожалению, Scala говорит ResultHolder cannot be cast to ResultHolder
, когда я делаю следующее:
import org.darevay.rooscaloo._
println(new Interpreter().eval("2"))
Я думал, что println
должен был принять Any
.Что должно происходить, так это то, что Interpreter.eval возвращает тип ResultHolder
, такой что ResultHolder.value
будет равен 2
.
Кроме того, попытка печати .value
не работает сошибка:
(fragment of Test.scala):3: error: value value is not a member of Any
println(new Interpreter().eval("2").value)
Подробнее
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
...
Caused by: java.lang.ClassCastException: org.darevay.rooscaloo.ResultHolder cannot be cast to org.darevay.rooscaloo.ResultHolder
at binder0$.set(<script>:1)
at binder0.set(<script>)
... 24 more (unsure how to print them)
Хотя я новичок в Scala, возможно, внутренний механизм binder
пакета scala.tools.nsc.interpreter
пытается что-то сделатьстранно.
Я вызываю сценарий как scala Test.scala
.
Вопрос
Мой вопрос: что является причиной этого сообщения об ошибке, что являетсяреальная проблема, и как получить рабочий пример кода для scala.tools.nsc. [интерпретатор]?Спасибо.