В 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 пытается сделать что-то странное.
Я вызываю script как scala Test.scala.
Вопрос
Мой вопрос: в чем причина этого сообщения об ошибке, какова реальная проблема, и как получить рабочий пример кода для scala.tools.nsc. [interpreter]? Спасибо.
