如何将使用三元运算符的C ++代码移植到Rust?

时间:2017-07-14 00:02:08

标签: if-statement rust conditional-operator

如何将此C ++代码移植到Rust:

auto sgnR = (R >= 0.) ? 1. : -1.;

我看过match关键字的一些示例,但我不明白它是如何工作的。

2 个答案:

答案 0 :(得分:25)

Rust没有三元运算符,因为它不需要。一切都评估为某个值,if / else语句也不例外:

let r = 42.42;
let sgn_r = if r >= 0. { 1. } else { -1. };

您注意到我还将您的变量名称更改为惯用Rust。标识符使用snake_case

不要被Rust 所具有的?运算符所困惑。这是called the "try operator" and is used to propagate errors

特别是对于代码,您可能应该使用f64::signum

let r = 42.42_f64;
let sgn_r = r.signum();

答案 1 :(得分:1)

从 Rust 1.50 开始,您可以使用 bool::then 来完成相同的事情:

let sgn_r = (r >= 0).then(|| 1).unwrap_or(-1);

请注意,出于可读性原因,通常最好使用常规的 if/else 语句,但 bool::then 是在某些情况下可能更好的替代方法。