你能把另一个匹配子句放在匹配臂中吗?

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()
}