< 返回版块

Aaron009 发表于 2021-01-16 21:53

小白又来了,不知道论坛欢不欢迎。新人第一次学习,希望多多关照。

fn main() {
    let x = 4;
    let y = false;

    match x {
        4 | 5 | 6 if y => println!("yes"),
        _ => println!("no"),
    }
}

这是官方教程的示例。我想把它改成 当 x 等于 4 或者 5 或者 6 或 y 等于 false时,输出 yes。该如何改?

评论区

写评论
坚果修补匠 2021-01-18 11:15

你这个不对。if !y和前面的条件形成了与的关系。最终的效果是(x==4||x==5||x==6)&&!y。可以参考官方文档

--
👇
snylonue: ```rust fn main() { let x = 4; let y = false;

match x {
    4 | 5 | 6 if !y => println!("yes"),
    _ => println!("no"),
}

}

比较喜欢这样的
snylonue 2021-01-17 17:13
fn main() {
    let x = 4;
    let y = false;

    match x {
        4 | 5 | 6 if !y => println!("yes"),
        _ => println!("no"),
    }
}

比较喜欢这样的

c5soft 2021-01-17 14:18

如果不能优化,理论上(4, _) | (5, _) | (6, ) 应该比使用Range的表达(4..=6,)编译结果更好一点点,美是简单!

c5soft 2021-01-17 14:11

大家写得都不错,最直白的写法就是:

fn main() {
    let x = 4;
    let y = false;

    match (x, y) {
        (4, _) | (5, _) | (6, _) | (_, false) => println!("yes"),
        _ => println!("no"),
    }
}

eweca 2021-01-16 23:04
fn main() {
    let x = 6;
    let y = true;

    match (x, y) {
        (4..=6, _) | (_, false)  => println!("yes"),
        _ => println!("no"),
    }
}
cyh0 2021-01-16 23:00

非常欢迎萌新,我也是,新手可以一起学习,非常好。 这道题我会选择多写个if else,楼上的写法很有趣,但不清晰明了。

93996817 2021-01-16 22:17
fn main() {
    let (x, y) = (8, false);
    match true {
        _ if [4, 5, 6].contains(&x) || !y => println!("yes"),
        _ => println!("no"),
    }
}

1 共 7 条评论, 1 页