匹配浮点的替代方法

时间:2017-08-25 05:48:41

标签: rust pattern-matching match

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

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

1 个答案:

答案 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核心团队不想与浮点值匹配的原因)。