【问题标题】:What is the preferred way of matching a variable with a pattern guard that doesn't use the matched value?将变量与不使用匹配值的模式保护匹配的首选方法是什么?
【发布时间】:2015-08-13 06:56:17
【问题描述】:

在下面的两个 sn-ps 之间,哪个更好/首选?

fn main() {
    let pair = 7;

    match pair {
        pair if pair > 5 => println!("Yeah"),
        _ => println!("No"),
    }
}
fn main() {
    let pair = 7;

    match pair {
        _ if pair > 5 => println!("Yeah"),
        _ => println!("No"),
    }
}

有没有更好的方法来写这个?因为这不起作用:

fn main() {
    let pair = 7;

    match pair {
        > 5 => println!("Yeah"),
        _ => println!("No"),
    }
}

【问题讨论】:

    标签: rust


    【解决方案1】:

    不绑定匹配变量的版本优先:

    fn main() {
        let pair = 7;
    
        match pair {
            _ if pair > 5 => println!("Yeah"),
            _ => println!("No"),
        }
    }
    

    这是最短的版本匹配。当然,这个例子可以只使用if

    我真的很惊讶第一个版本没有对未使用的变量发出警告。

    啊,这是我傻了。变量 is 在此处使用,在模式保护中。 ^_^

    【讨论】:

    • 谢谢,我同意在这个简单的情况下它可以。但是,如果您添加更多案例,例如> 1000 > 100 > 10 > 0 ... if else if else 不会很好。在未来的版本中是否有可能将我的最后一个示例视为语法糖?我的意思是我可以向开发人员提出这个建议还是没有意义?
    • 为什么我的第一个示例会对未使用的变量发出警告?正如我所看到的,pair 总是等于 pair,所以第一个模式总是 true(之后你添加了保护条件)
    • @MathieuDavid match arm 的左侧是一个模式,它创建了一组新的变量绑定。值得注意的是,外部pair 和内部pair 是不同的。如果您将内部名称更改为 foobar 并移除保护,它会也始终匹配
    • @Shepmaster 在第一个示例中哪个变量将被视为未使用?
    • @Shepmaster 我做了一个post on the Rust user forum :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2018-11-03
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    相关资源
    最近更新 更多