你可以在匹配的匹配结果中添加另一个匹配子句,如下所示:
pub fn is_it_file(input_file: &str) -> String {
let path3 = Path::new(input_file);
match path3.is_file() {
true => "File!".to_string(),
false => match path3.is_dir() {
true => "Dir!".to_string(),
_ => "Don't care",
}
}
}
如果不是为什么?
答案 0 :(得分:7)
是的,你可以(见Qantas的回答)。但鲁斯特经常有更漂亮的方法去做你想做的事。您可以使用元组一次执行多个匹配。
pub fn is_it_file(input_file: &str) -> String {
let path3 = Path::new(input_file);
match (path3.is_file(), path3.is_dir()) {
(true, false) => "File!",
(false, true) => "Dir!",
_ => "Neither or Both... bug?",
}.to_string()
}
答案 1 :(得分:4)
当然可以,match
is an expression:
fn main() {
fn foo() -> i8 {
let a = true;
let b = false;
match a {
true => match b {
true => 1,
false => 2
},
false => 3
}
}
println!("{}", foo()); // 2
}
您可以在Rust playpen上查看此结果。
对我来说,代码中唯一似乎是.to_string()
在您的代码中使用不一致,最后一个匹配案例没有。