Параметры разбора, которые принимают более одного значения с помощью scopt в scala

Я использую scopt для разбора аргументов командной строки в Scala. Я хочу, чтобы он мог анализировать варианты с более чем одним значением. Например, опция диапазона, если она указана, должна принимать ровно два значения.

--range 25 45

Исходя из фона Python, я в основном ищу способ сделать следующее с помощью scopt вместо argparse Python:

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

Я не думаю minOccurs а также maxOccurs решает мою проблему точно, ни ключ: пример значения в его помощи.

2 ответа

Решение

Глядя на исходный код, это невозможно. Read Используемый класс типа имеет член tuplesToRead, но, кажется, он не работает, когда вы заставляете его 2 вместо 1, Я думаю, вам придется сделать запрос на функцию или обойти это, используя --min 25 --max 45, или же --range '25 45' с обычаем Read экземпляр, который разбивает эту строку на две части. Как заметил @roterl, это не стандартный способ разбора.

Все должно быть в порядке, если только ваши значения разделены чем-то другим, кроме пробела...

--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}")
Другие вопросы по тегам