gpt4 book ai didi

使用 scopt 解析 Scala 选项

转载 作者:行者123 更新时间:2023-12-04 23:50:29 29 4
gpt4 key购买 nike

使用 scopt https://github.com/scopt/scopt

我有一个非常简单的 Scala CLI 驱动程序,它在 .parse 的第一行出错。该行是 var i = 0,无法想象为什么会失败,也许与我如何实例化 OptionParser 有关?

def parse(args: Seq[String], init: C): Option[C] = {
var i = 0 <———————————————— prints the error below
val pendingOptions = ListBuffer() ++ (nonArgs filterNot {_.hasParent})

Exception in thread "main" java.lang.NoSuchMethodError: scala.runtime.IntRef.create(I)Lscala/runtime/IntRef;
at scopt.OptionParser.parse(options.scala:306)
at org.apache.mahout.drivers.ItemSimilarityDriver$.main(ItemSimilarityDriver.scala:47)
at org.apache.mahout.drivers.ItemSimilarityDriver.main(ItemSimilarityDriver.scala)

完整代码在这里,抱歉,我是 Scala 的新手,所以这可能是一个非常愚蠢的问题
object ItemSimilarityDriver {
/**
* @param args Command line args, if empty a help message is printed.
* @return
*/

def main(args: Array[String]): Unit = {

val parser = new OptionParser[Config]("ItemSimilarity") {
head("ItemSimilarity", "Spark")
opt[Unit]('r', "recursive") action { (_, c) =>
c.copy(recursive = true) } text("The input path should be searched recursively for files that match the filename pattern (optional), Default: false.")
opt[String]('o', "output") required() action { (x, c) =>
c.copy(output = x) } text("Output is a path for all output (required)")
opt[String]('i', "input") required() action { (x, c) =>
c.copy(input = x) } text("Input is a path for input, it may be a filename or dir name. If a directory it will be searched for files matching the -p pattern. (required)")
note("some notes.\n")
help("help") text("prints this usage text")
}
// parser.parse returns Option[C]
parser.parse(args, Config()) map { config => <—————————— parser was created
but this call fails in the parse
// do stuff
//val didIt = true
} getOrElse {
// arguments are bad, error message will have been displayed, throw exception, run away!
}

}

case class Config(recursive: Boolean = false, input: String = null, output: String = null)

}

我也尝试过具有相同错误的可变选项方法。

最佳答案

问题似乎与 Scala 库版本和 scopt 不匹配。当前的稳定 scopt 3.2.0 是针对以下对象交叉发布的:

  • 斯卡拉 2.9.1
  • 斯卡拉 2.9.2
  • 斯卡拉 2.9.3
  • 斯卡拉 2.10
  • 斯卡拉 2.11

  • Scala 2.10 和 2.11 工件使用 sbt 0.12 的交叉版本控制约定并使用 _2.10后缀,因为 Scala 2.10.x 次要版本与 Scala 2.10.0 二进制兼容。换句话说 scopt_2.11不是 scopt_2.10 的更新版本.一个是针对 Scala 2.11.x 编译的,而另一个是针对 Scala 2.10.x 编译的。

    我建议您尝试使用 sbt 来管理外部库。 sbt 有一个插件可以为你生成 IntelliJ 项目。

    关于使用 scopt 解析 Scala 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23434393/

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