【问题标题】:Interpreter result type not found despite importing it尽管已导入,但未找到解释器结果类型
【发布时间】:2011-12-09 22:26:30
【问题描述】:

我使用 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,虽然我是导入的。

【问题讨论】:

  • 对于一个测试,你可以在var success = results.asInstanceOf[Success]之前的行中导入Success吗?

标签: scala interpreter read-eval-print-loop


【解决方案1】:

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

import tools.nsc.interpreter.Results._

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

如果你想在成功的情况下获得解释表达式的结果值,更多详情请见my reply in this post

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多