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

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!"),

我有一个名为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的第一个分支,还是同时使用这两个分支

如果两者都是,那么你真的应该使用多个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!")
    }
}