Тип результата интерпретатора не найден, несмотря на его импорт - PullRequest
2 голосов
/ 10 декабря 2011

Я использую Scala 2.9.1. У меня есть простой scala "переводчик":

import scala.tools.nsc.interpreter.IMain
import scala.tools.nsc.interpreter.Results.Result
import scala.tools.nsc.interpreter.Results.Success

object App {

  def main(args: Array[String]) {
    val interpreter = new IMain
    val result:Result = interpreter.interpret(args(0))
    result.toString() match {
      case "Success" =>
        {
          var success = result.asInstanceOf[Success]
          println(success.productElement(0))
        };
      case _ => println("very bad result");
    }
  }

}

Когда я пытаюсь его скомпилировать (maven), я получаю:

[ERROR] /home/koziolek/workspace/dsi/src/main/scala/pl/koziolekweb/scala/dsi/App.scala:15: error: not found: type Success
[INFO]           var success = result.asInstanceOf[Success]

Как видите, компилятор сказал, что нет типа Success, хотя я его импортировал.

1 Ответ

7 голосов
/ 10 декабря 2011

Success - это объект, а не класс, вам нужно привести его к одноэлементному типу result.asInstanceOf[Success.type]. Очевидно, вы пытаетесь обойти не зная, как сделать сопоставление с образцом. Это позволит вам получить правильный результат без приведения:

import tools.nsc.interpreter.Results._

result match {
   case Success    => "yes!"
   case Error      => "no..."
   case Incomplete => "you missed something"
}

Если вы хотите получить результирующее значение интерпретируемого выражения в случае успеха, см. мой ответ в этом посте для получения более подробной информации.

...