gpt4 book ai didi

rust - 如何在不需要显式值的情况下使一个论点暗示另一个论点? (--foo,不是--foo true)

转载 作者:行者123 更新时间:2023-12-05 03:31:01 27 4
gpt4 key购买 nike

我希望一个论点暗示另一个论点,尽管它们不采用明确的值。 --simple-anime--complex-anime 应该暗示 --anime。应该工作的 API 是 default_value_ifs,表示如果存在前者之一,--anime 也将为真。问题是该选项打开了 takes_value,如果我关闭它,暗示就不会发生。

简单示例:--dog 表示--mammal。两者都不应该需要一个值——如果参数存在则为真。

use clap::Parser;

fn main() {
let args = Args::parse_from(["prog-name", "--dog"]);
assert_eq!(args.dog, true);
assert_eq!(args.mammal, true);
dbg!(&args);

let args = Args::try_parse_from(["prog-name", "--mammal"]);
dbg!(&args);
assert!(matches!(args, Ok(_)));
}


#[derive(Parser, Debug)]
#[clap()]
struct Args {
//#[clap(long, default_value_if("dog", None, Some("true")), takes_value(false))]
#[clap(long, default_value_if("dog", None, Some("true")))]
mammal: bool,

#[clap(long)]
dog: bool,
}

在 rust playground 中尝试:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=4855a88381f65cef8d07f7eab4d41e78

最佳答案

代替 takes_value(false) 使用 min_values(0) ( playground ):

#[clap(long, default_value_if("dog", None, Some("true")), min_values(0))]
mammal: bool,

看起来默认值实现使用与相同的代码,所以如果您禁用一个,就会禁用另一个。

关于rust - 如何在不需要显式值的情况下使一个论点暗示另一个论点? (--foo,不是--foo true),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70718779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com