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

How can I port C++ code that uses the ternary operator to Rust?

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

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

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

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();

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

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

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