你能把另一个匹配子句放在匹配臂中吗?
Can you put another match clause in a match arm?
你能不能把另一个匹配子句放在像这样的匹配的一个匹配结果中:
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",
}
}
}
如果不是为什么?
当然可以,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()
的使用不一致,最后一个匹配案例没有那个。
是的,可以(请参阅澳洲航空的回答)。但 Rust 通常有更漂亮的方法来做你想做的事。您可以使用元组一次进行多个匹配。
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()
}
你能不能把另一个匹配子句放在像这样的匹配的一个匹配结果中:
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",
}
}
}
如果不是为什么?
当然可以,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()
的使用不一致,最后一个匹配案例没有那个。
是的,可以(请参阅澳洲航空的回答)。但 Rust 通常有更漂亮的方法来做你想做的事。您可以使用元组一次进行多个匹配。
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()
}