Использование метода "help" в неизменяемом SCOPT (Scala) OptionParser (2.0.1)
Я пытаюсь использовать новый неизменный OptionParser
в библиотеке Scala Scopt 2.0.1. поскольку OptionParser
принимает универсальный тип, а метод help уже определяет действие, которое возвращает 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 ответ
Во-первых, кажется, что в библиотеке произошла ошибка, когда один из перегруженных методов 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 })