I currently have to use this to format a .expect()
message:
fn main() {
let x: Option<&str> = None;
x.expect(&format!("the world is ending: {}", "foo")[..]);
}
Is there a less verbose way?
I would do:
option.unwrap_or_else(|| panic!("ah: {}", "nuts"))
Formatting a string is somewhat costly. This will avoid formatting the string unless it is really needed.
First you don't need to write [..]
If you really want to panic but also want to format the error message, I think I would use assert!()
:
fn main() {
let x: Option<&str> = None;
assert!(x.is_some(), "the world is ending: {}", "foo");
let _x = x.unwrap();
}
If you want you could also use the unwrap
crate:
use unwrap::unwrap;
fn main() {
let x: Option<&str> = None;
let _x = unwrap!(x, "the world is ending: {}", "foo");
}
Also, both these methods avoid the construction of the error String
every time, unlike calling expect()
with format!()
.
To avoid the unnecessary overhead of formatting and allocating a String
in the case of an Ok
, you can convert the Option
to a Result
and then unwrap it:
fn main() {
let x: Option<&str> = None;
x.ok_or_else(|| format!("the world is ending: {}", "foo"))
.unwrap();
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With