Как я могу отключить исключение Scopt "Неизвестные параметры"?
У меня есть базовый класс дел Config, который используется как общая часть конфигураций нескольких разных скриптов. Я хотел бы иметь возможность остановить копирование кода вставки для OptionParsers, которые анализируют эту базовую конфигурацию (например, каждый сценарий нуждается --cluster
а также --port
поэтому я хотел бы, чтобы один базовый OptionParser всегда позаботился об этом), и позволил минимальному настраиваемому OptionParser позаботиться о параметрах, уникальных для каждого сценария (например, --asdf
).
Проблема в том, что если я попрошу базовый парсер проанализировать аргументы, содержащие --asdf
Скопт жалуется:
[error] Error: Unknown option --asdf
[error] Usage: Config [options]
[error]
[error] -c <value> | --cluster <value>
[error] Cluster the machine is part of
[error] -p <value> | --port <value>
[error] Port to listen on
...
[error] Exception in thread "main" java.util.NoSuchElementException: None.get
Есть ли способ заставить его игнорировать неизвестные аргументы?
2 ответа
При определении кастома OptionParser
Проще говоря лишний
override def errorOnUnknownArgument = false
в определение. Например,
def optionParser = new OptionParser[CustomConfig]("Config") {
override def errorOnUnknownArgument = false
opt[String]('a', "asdf") optional () action { (x, c) =>
c.copy(asdf = x)
} text "Do something custom"
...
}
На всякий случай, если вы используете
OParser
// define a setup
val setup: OParserSetup = new DefaultOParserSetup {
override def errorOnUnknownArgument: Boolean = false
}
// then pass setup to parse function
OParser.parse(parser, args, YourConfig(), setup)