Как я могу изменить имена значений в аргументе хлопать, который принимает несколько значений? - PullRequest
0 голосов
/ 29 ноября 2018

Как часть моего инструмента CLI, у меня есть clap::Arg, который принимает несколько значений, представляющих координату (x, y).Я хочу, чтобы использование могло передавать значение как -p/--position 1 0

.arg(
    clap::Arg::with_name("position")
        .help("The position for yada yada yada")
        .long("position")
        .short("p")
        .number_of_values(2)
        .validator(|p| match p.parse::<usize>() {
            Err(_) => Err(String::from("Error string")),
            Ok(_) => Ok(()),
        }
    )
)

Хотя это работает для интерфейса, который я хочу, это создает несколько запутанное справочное сообщение:

... Help text ...

OPTIONS:
    ... other options ...
    -p, --position <position> <position>    The position for yada yada yada

Что меня беспокоит, так это -p, --position <position> <position>, который, кажется, указывает на то, что две позиции передаются в аргумент.Можно ли как-нибудь заменить <position> <position> на выбранные мной строки?(Моя цель - получить что-то вроде -p, --position <x> <y> в сообщении помощи.)

1 Ответ

0 голосов
/ 29 ноября 2018

Быстрый просмотр документации дает нам value_names():

Укажите несколько имен для значений аргументов опции.Эти имена являются только косметическими, используются только для справки и использования строк.Имена не используются для доступа к аргументам.Доступ к значениям аргументов осуществляется в числовом порядке (т. Е. Если вы укажете два имени, одно и два из которых будут первым совпадающим значением, два - вторым).

ПРИМЕЧАНИЕ. Это неявно устанавливает Arg::number_of_values, есликоличество имен значений больше единицы.Т.е. имейте в виду, что количество «имен», которые вы задаете для значений, будет точным числом значений, необходимых для удовлетворения этого аргумента

ПРИМЕЧАНИЕ: неявно устанавливает Arg::takes_value(true)

.arg(
    clap::Arg::with_name("position")
        .help("The position for yada yada yada")
        .long("position")
        .short("p")
        .value_names(&["x", "y"])
        .validator(|p| match p.parse::<usize>() {
            Err(_) => Err(String::from("Error string")),
            Ok(_) => Ok(()),
        }
    )
)
...