在不可变SCOPT(Scala)OptionParser(2.0.1)中使用“help”方法

时间:2012-03-27 15:51:01

标签: scala scopt

我正在尝试在Scala scopt 2.0.1库中使用新的不可变OptionParser。由于OptionParser采用泛型类型且帮助方法已经定义了返回Unit的操作,因此我收到编译时错误:

case class Config(directory: String = null)

val parser = new OptionParser[Config]() {
  def options = Seq(
    opt("d", "directory", "directory containing the files to be processed") {
      (value: String,  config: Config) => config.copy(directory = value)
    },
    help("?", "help", "Show a usage message and exit"))
}

error: type mismatch;
[INFO]  found   : scopt.generic.FlagOptionDefinition[Nothing]
[INFO]  required: scopt.generic.OptionDefinition[Config]
[INFO] Note: Nothing <: Config, but class OptionDefinition is invariant in type C.

如何添加“帮助”选项?

1 个答案:

答案 0 :(得分:2)

首先,库中似乎存在一个错误,其中opt的一个重载方法采用了一个不应该的类型参数C - 至少我从哪个方面可以告诉。它应该从课堂上取C。无论如何,虽然您使用该调用,但我猜Scala仍然正确地推断出此C与类CConfig)相同。

问题似乎是help完全没用 - 它会为您FlagOptionDefinition[Nothing]提供action: => C,因为其{this.showUsage; exit}实施是OptionParser

我认为help类需要修复......

您可以编写自己的C方法来强制执行def help2(shortopt: String, longopt: String, description: String) = new FlagOptionDefinition[C](Some(shortopt), longopt, description, { this.showUsage; exit }) 类型参数:

{{1}}