你能在比赛中放入另一个比赛条款吗?

时间:2015-01-20 08:44:06

标签: rust

你可以在匹配的匹配结果中添加另一个匹配子句,如下所示:

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",
        }
    }
}

如果不是为什么?

2 个答案:

答案 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()在您的代码中使用不一致,最后一个匹配案例没有。