匹配浮点的替代方法

Tom*_*Tom 7 pattern-matching match rust

Rust决定在模式中禁止float文字:完全允许匹配浮点文字值,不应该是#41255.它目前是一个警告,但在将来的版本中将是一个很难的错误.

我的问题是,如何使用以下代码实现等效?:

struct Point {
    x: f64,
    y: f64,
}

let point = Point {x: 5.0, y: 4.0};

match point {
    Point {x: 5.0 , y} => println!("y is {} when x is 5", y), // Causes warning
    _ => println!("x is not 5")
}
Run Code Online (Sandbox Code Playgroud)

现在不可能吗?我是否需要改变对模式的看法?还有另一种匹配方式吗?

Sim*_*ead 13

你可以使用比赛守卫:

 match point {
    Point { x, y } if x == 5.0 => println!("y is {} when x is 5", y), 
    _ => println!("x is not 5"),
}
Run Code Online (Sandbox Code Playgroud)

这会将责任交给您,因此不会产生任何警告.

浮点相等虽然是一个有趣的主题 ...所以我建议你进一步研究它,因为它可能是bug的来源(我想这是Rust核心团队不想与浮点值匹配的原因) ).