Параметры разбора, которые принимают более одного значения с помощью 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}")