2

我正在使用scopt来解析 scala 中的命令行参数。我希望它能够解析具有多个值的选项。例如,范围选项(如果指定)应该正好取两个值。

--range 25 45

来自 python 背景,我基本上是在寻找一种方法来使用 scopt 而不是 python 的 argparse 执行以下操作:

    parser.add_argument("--range", default=None, nargs=2, type=float,
                         metavar=('start', 'end'),
                         help=(" Foo bar start and stop "))

我没有完全思考minOccursmaxOccurs解决我的问题,也没有在它的帮助中提供 key:value 示例。

4

2 回答 2

1

查看源代码,这是不可能的。使用的Read类型类有一个 member tuplesToRead,但是当你强制它2而不是1. 我猜你将不得不提出一个功能请求,或者通过使用来解决这个问题--min 25 --max 45,或者使用一个将这个字符串分成两部分--range '25 45'的自定义实例。Read正如@roterl 所指出的,这不是标准的解析方式。

于 2014-09-28T11:58:22.220 回答
0

如果只有您的值用空格以外的其他东西分隔,那应该没问题...

--range 25-45

...尽管您需要手动拆分它们。用类似的东西解析它:

opt[String]('r', "range").action { (x, c) =>
  val rx = "([0-9]+)\\-([0-9]+)".r
  val rx(from, to) = x
  c.copy(from = from.toInt, to = to.toInt)
}
// ...
println(s" Got range ${parsedArgs.from}..${parsedArgs.to}")
于 2017-03-12T00:12:36.937 回答