gpt4 book ai didi

syntax - 如何在匹配语句中使用实例化结构值?

转载 作者:行者123 更新时间:2023-11-29 08:34:28 25 4
gpt4 key购买 nike

我有一个名为 args 的原始结构 Args 的实例化结构示例。

struct Args {
arg1: bool,
arg2: bool,
}

实例化结构是:

let args = Args {
arg1: true,
arg2: false,
}

使用这些参数,我试图避免 if-else 语句的困惑,而只使用 match 语句。但是,当尝试执行以下操作时:

match true {
args.arg1 => println!("Argument 1 is true!"),
args.arg2 => println!("Argument 2 is true!"),
}

我得到了错误

error: expected one of `=>`, `@`, `if`, or `|`, found `.`
--> src/main.rs:13:13
|
13 | args.arg1 => println!("Argument one is true"),
| ^ expected one of `=>`, `@`, `if`, or `|` here

error: aborting due to previous error

是否应该使用转义字符序列来避免这种情况,或者这只是不正确的语法?

最佳答案

对于将 arg1 和 arg2 都设置为 true 的情况,我不清楚您的意思是什么 - 您是只想采用 if 的第一个分支,还是两者都采用?

如果两者兼而有之 - 那么您真的应该使用多个 ifs。

if args.arg1 { println!("Argument 1 is true!") }
if args.arg2 { println!("Argument 2 is true!") }

如果只有一个更喜欢 arg1,那么您可以使用 struct destructure

match args {
Args { arg1:true, ..} => println!("Argument 1 is true!"),
Args { arg2:true, ..} => println!("Argument 2 is true!"),
_ => println!("Neither is true")
}

您也可以使用匹配来匹配更复杂的情况

match args {
Args {arg1:true, arg2:false, ...} => println!("TF"),
}

但是,如果一次最多有一个参数为真,那么您确实有一个枚举并且应该像这样处理它

enum Arg {
None,
Arg1,
Arg2
}

fn main() {
let args:Args = get_argument();
match args {
Args::None => println!("none"),
Args::Arg1 => println!("Argument 1 is true!"),
Args::Arg2 => println!("Argument 2 is true!")
}
}

关于syntax - 如何在匹配语句中使用实例化结构值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439273/

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