gpt4 book ai didi

scala.reflect.internal.FatalError : package scala does not have a member Int

转载 作者:行者123 更新时间:2023-12-04 08:43:36 25 4
gpt4 key购买 nike

我目前正在使用 Scala 和 Play Framework 2 开发一个项目。我想在运行时编译一些 Scala 代码并从解释器中获取结果。我在网上找了一些例子,最后得出了以下代码:

package controllers

import play.api.mvc.{Action, Controller}
import javax.script.ScriptEngineManager

class Interpreter extends Controller {

val interpreter = new ScriptEngineManager().getEngineByName("scala")
val settings = interpreter.asInstanceOf[scala.tools.nsc.interpreter.IMain].settings
settings.embeddedDefaults[Interpreter]
settings.usejavacp.value = true

def index = Action {
Ok(views.html.interpreter())
}

def interpret(input: String) = Action {
implicit request => interpreter.eval("1 to 10 foreach println")
Ok("Got: " + input)
}
}

object Interpreter

我的问题是我总是收到来自 scala.reflect.internal.FatalError: "package scala does not have a member Int" 的错误消息, 尝试运行此代码时。经过一些研究,我发现了这篇文章中描述的类似问题:

Scala and Play 2.0 Plugins Update 0.38.437 is Out

Scala compiler error: package api does not have a member materializeWeakTypeTag

我当前的 Scala 版本是 2.11.4,所以我尝试在我的“build.sbt”文件中切换到不同的“scala-compiler”和“scala-library”版本,但没有成功。就像在上面的帖子中提到的那样,它可能是 Scala 中的一个错误。我想知道是否有人对所描述的问题有解决方案或任何解决方法。

在此先感谢您的任何帮助或建议。

最佳答案

问题出在使用 Scala 和 Play Framework 2 的项目中的类路径中。
可以通过将类路径从 SBT 填充到应用程序来解决:

添加到 build.sbt 文件:

val sbtcp = taskKey[Unit]("sbt-classpath")

sbtcp := {
val files: Seq[File] = (fullClasspath in Compile).value.files
val sbtClasspath : String = files.map(x => x.getAbsolutePath).mkString(":")
println("Set SBT classpath to 'sbt-classpath' environment variable")
System.setProperty("sbt-classpath", sbtClasspath)
}

compile <<= (compile in Compile).dependsOn(sbtcp)

代码:
package controllers

import play.api.mvc.{Action, Controller}
import javax.script.ScriptEngineManager

class Interpreter extends Controller {

val interpreter = new ScriptEngineManager().getEngineByName("scala")
val settings = interpreter.asInstanceOf[scala.tools.nsc.interpreter.IMain].settings
//settings.embeddedDefaults[Interpreter] // not need
//settings.usejavacp.value = true // not need
val sbtClasspath = System.getProperty("sbt-classpath")
settings.classpath.value = s".:${sbtClasspath}" // <-- this line fix the problem

def index = Action {
Ok(views.html.interpreter())
}

def interpret(input: String) = Action {
implicit request => interpreter.eval("1 to 10 foreach println")
Ok("Got: " + input)
}
}

object Interpreter

在生产中应该使用另一个场景来获得正确的类路径。

可能使用命令行中的“-cp”或“-classpath”键。

关于scala.reflect.internal.FatalError : package scala does not have a member Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com