Как указать логический флаг командной строки с помощью Clap?

Я хочу добавить флаг командной строки. Это флаг, поэтому он не принимает аргументов, присутствует он или нет. Мне также нужно знать, как читать флаг: ИСТИНА или ЛОЖЬ.

Это код для определения флага:

.arg(
    Arg::with_name("metal")
        .long("metal-micky")
        .required(false)
        .help("I want metal micky"),
)

Я пытаюсь прочитать значение вот так:

let z = matches.value_of("metal");

Однако, когда я его распечатываю, это приводит к None:

println!("FLAG: {:?}", z);

Это None, даже когда я указываю флаг в командной строке.


person Peter Prographo    schedule 28.02.2020    source источник


Ответы (2)


Не знаю, одобрен ли это метод, но я использую Args::takes_value:

.arg(
    Arg::with_name("metal")
        .long("metal-micky")
        .required(false)
        .takes_value(false)
        .help("I want metal micky"),
)

Затем проверьте, был ли передан флаг с помощью matches.is_present("metal")

person yorodm    schedule 28.02.2020

Этот ответ устарел. Вы хотите:

.arg(
    Arg::with_name("metal")
        .long("metal-micky")
        .takes_value(false)
        .help("I want metal mickey")

Затем вы проверяете: matches.is_present("metal")

person Digant C Kasundra    schedule 28.07.2020
comment
Вы всегда можете отредактировать ответ. - person Evan Carroll; 16.02.2021