Rust决定禁止使用模式中的浮点文字:Matching on floating-point literal values is totally allowed and shouldn't be #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")
}
现在不可能吗?我是否需要改变对模式的看法?还有另一种匹配方法吗?
答案 0 :(得分:13)
你可以使用比赛后卫:
match point {
Point { x, y } if x == 5.0 => println!("y is {} when x is 5", y),
_ => println!("x is not 5"),
}
这会将责任交给你,因此它不会产生任何警告。
Floating point equality is an interesting subject though ...所以我建议你进一步研究它,因为它可能是bug的来源(我想这是Rust核心团队不想与浮点值匹配的原因)。