我正在尝试在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.
如何添加“帮助”选项?
答案 0 :(得分:2)
首先,库中似乎存在一个错误,其中opt
的一个重载方法采用了一个不应该的类型参数C
- 至少我从哪个方面可以告诉。它应该从课堂上取C
。无论如何,虽然您使用该调用,但我猜Scala仍然正确地推断出此C
与类C
(Config
)相同。
问题似乎是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}}