gpt4 book ai didi

scala - 是否可以使用 scala 脚本中的 scalap?

转载 作者:行者123 更新时间:2023-12-04 16:12:06 24 4
gpt4 key购买 nike

我正在使用 scalap读出某些案例类的字段名称(如 this question 中所述)。案例类和使用 scalap 的代码分析它们已经被编译并放入类路径上的 jar 文件中。

现在我想运行一个使用这个代码的脚本,所以我跟着 the instructions并想出了类似的东西

::#!
@echo off
call scala -classpath *;./libs/* %0 %*
goto :eof
::!#
//Code relying on pre-compiled code that uses scalap

这不起作用:

java.lang.ClassCastException: scala.None$ cannot be cast to scala.Option at scala.tools.nsc.interpreter.ByteCode$.caseParamNamesForPath(ByteCode. scala:45) at scala.tools.nsc.interpreter.ProductCompletion.caseNames(ProductComple tion.scala:22)



但是,当我编译所有内容时,代码运行良好。我玩了额外的 scala选项如 -savecompiled ,但这没有帮助。这是一个错误,还是原则上不能工作? (如果是这样,有人可以解释为什么不可以吗?正如我所说的,应该由 scalap 分析的案例类被编译。)

注意:我使用 Scala 2.9.1-1。

编辑

这是我基本上想要做的事情(提供一种创建案例类的多个实例的简单方法):
//This is pre-compiled:
import scala.tools.nsc.interpreter.ProductCompletion
//...
trait MyFactoryTrait[T <: MyFactoryTrait[T] with Product] {
this: T =>

private[this] val copyMethod = this.getClass.getMethods.find(x => x.getName == "copy").get

lazy val productCompletion = new ProductCompletion(this)

/** The names of all specified fields. */
lazy val fieldNames = productCompletion.caseNames //<- provokes the exception (see above)

def createSeq(...):Seq[T] = {
val x = fieldNames map { ... } // <- this method uses the fieldNames value
//[...] invoke copyMethod to create instances
}
// ...
}

//This is pre-compiled too:
case class MyCaseClass(x: Int = 0, y: Int = 0) extends MyFactoryTrait[MyCaseClass]

//This should be interpreted (but crashes):
val seq = MyCaseClass().createSeq(...)

注意:我转到 Scala 2.9.2,错误保持不变(所以可能不是错误)。

最佳答案

这是编译器中的一个错误:

  • 如果您在 ide 中运行该程序,例如 Intellij IDEA,则代码执行良好,但是找不到字段名称。
  • 如果您使用 scala 从命令行运行它,则会出现您提到的错误。

  • 类型安全无法编译并抛出运行时 ClassCastException。

    请在 https://issues.scala-lang.org/secure/Dashboard.jspa 打开错误

    关于scala - 是否可以使用 scala 脚本中的 scalap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10312195/

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