尽管导入了解释器结果类型,但未找到它

Koz*_*łek 2 interpreter scala read-eval-print-loop

我使用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");
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它(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]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,编译器表示没有类型Success,尽管我导入了它.

0__*_*0__ 7

Success是一个对象,而不是一个类,你需要将它强制转换为单例类型result.asInstanceOf[Success.type].显然,你正试图解决不知道如何进行模式匹配的问题.这样可以在不进行投射的情况下获得正确的结果:

import tools.nsc.interpreter.Results._

result match {
   case Success    => "yes!"
   case Error      => "no..."
   case Incomplete => "you missed something"
}
Run Code Online (Sandbox Code Playgroud)

如果您想在成功的情况下获得解释表达式结果值,请参阅本文中的回复以获取更多详细信息.