2017-08-25 64 views
7

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

是现在不可能的等效例子吗?我是否需要改变我对模式的看法?有没有其他的方法来匹配它?

回答

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 ...所以我会建议你进一步研究它,因为它可能是错误(我想象的铁锈核心团队不希望对阵浮点值的原因)的来源。