如何将使用三元运算符的 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
是在某些情况下可能更好的替代方法。
如何将此 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
是在某些情况下可能更好的替代方法。