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

Ste*_*nko 12 if-statement conditional-operator rust

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

auto sgnR = (R >= 0.) ? 1. : -1.;
Run Code Online (Sandbox Code Playgroud)

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

She*_*ter 41

Rust没有三元运算符,因为它不需要.Everything评估为某个值,if/ elsestatements也不例外:

let r = 42.42;
let sgn_r = if r >= 0. { 1. } else { -1. };
Run Code Online (Sandbox Code Playgroud)

你会注意到我也把你的变量名改为了惯用的Rust.标识符使用snake_case.

不要被?Rust 确实拥有的操作员所困惑.这称为"try运算符",用于传播错误.


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

let r = 42.42_f64;
let sgn_r = r.signum();
Run Code Online (Sandbox Code Playgroud)

  • 我在这里只是想告诉您,我认为这是一个非常好的答案,涵盖了许多相关的内容。祝你今天过得愉快 :) (8认同)

Ibr*_*med 11

在这种情况下,您可以使用bool::thenorbool::then_some来完成同样的事情:

let sgn_r = (r >= 0).then_some(1).unwrap_or(-1);
Run Code Online (Sandbox Code Playgroud)

语句if/else可能会更好地提高可读性,但在某些情况下这可能会更好。