我有一个示例实例结构,名为args,它是原始结构Args。
import pandas as pd
df = pd.ExcelFile(xl_path).parse(sheet_name).append(iterable, ignore_index=True)
,实例结构为:
struct Args {
arg1: bool,
arg2: bool,
}
使用这些参数,我试图避免混乱的if-else语句,而仅使用let args = Args {
arg1: true,
arg2: false,
}
语句。但是,当尝试执行以下操作时:
match
我得到了错误
match true {
args.arg1 => println!("Argument 1 is true!"),
args.arg2 => println!("Argument 2 is true!"),
}
是否应该使用转义字符序列来避免这种情况,或者这仅仅是语法错误?
答案 0 :(得分:3)
对于我来说,对于同时将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!")
}
}