3

我有一个基本配置案例类,它用作几个不同脚本的配置的公共部分。我希望能够停止为解析此基本配置的 OptionParsers 复制粘贴代码(例如,每个脚本都需要--cluster--port因此我希望单个基本 OptionParser 始终处理该问题),并让最小的自定义 OptionParser注意每个脚本特有的选项(例如--asdf)。

问题是,如果我要求基本解析器解析包含 的参数--asdf,Scopt 会抱怨:

[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

有没有办法让它忽略未知的论点?

4

2 回答 2

10

定义自定义时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"
    ...
  }
于 2015-10-12T23:05:48.440 回答
1

以防万一您正在使用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)
于 2021-01-25T08:45:45.313 回答