Syntax 如何在匹配语句中使用实例结构值?
我有一个名为args的原始结构args实例Syntax 如何在匹配语句中使用实例结构值?,syntax,rust,Syntax,Rust,我有一个名为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!"),
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的第一个分支,还是同时使用这两个分支
如果两者都是,那么你真的应该使用多个If
if args.arg1 { println!("Argument 1 is true!") }
if args.arg2 { println!("Argument 2 is true!") }
如果只出现一个首选arg1,则可以使用
您也可以使用匹配来匹配更复杂的情况
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!")
}
}
有帮助吗?很高兴知道这是可能的,但我的生产程序使用了几个参数,而不仅仅是两个。。。迭代所有可能的组合将是一件痛苦的事情:/I我无法帮助您解决一些我看不到的问题。例如,它不只是arg1和arg2,而是arg1到arg10。这是您提出的一个很好的观点!我创建它的目的是希望一次只有一个参数为真。如果一次只有一个参数为真,那么您确实有一个枚举。我也会更新代码来详细说明这一点;但你的代码在我的情况下是完美的。。非常感谢。
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!")
}
}