How can I port this C++ code to Rust:

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

I have seen some examples with the match keyword, but I don't understand how it works.

7

2 Answers

Rust does not have the ternary operator because it's not needed. Everything evaluates to some value, and if / else statements are no exception:

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

You'll note that I've also changed your variable names to be idiomatic Rust. Identifiers use snake_case.

Do not be confused by the ? operator that Rust does have. This is called the "try operator" and is used to propagate errors.


Specifically for this code, it's likely you should use f64::signum:

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

As of Rust 1.50, you can use bool::then to accomplish the same thing:

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

Note that it is generally better to use a regular if/else statement for readability reasons, but bool::then is an alternative that may be nicer in certain circumstances.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy