如何将此C ++代码移植到Rust:
auto sgnR = (R >= 0.) ? 1. : -1.;
我看过match
关键字的一些示例,但我不明白它是如何工作的。
答案 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
是在某些情况下可能更好的替代方法。