You can use "unwrap()" on an Option, but you can't use "?". You have to write something like
let val = v.ok_or(anyhow!("Error message goes here"))?;
which is a bit unwieldy. fn square(v: &Option<f32>) -> f32 {
Ok(v.unwrap()*v.unwrap())
}
becomes fn square(v: &Option<f32>) -> Result<f32, Error> {
let val = v.ok_or(anyhow!("None value sent to square"))?;
Ok(val*val)
}
A default message would be useful.Bailing out of the middle of a map expression's closure is complicated. In that situation, "?" causes a return of the expression in the closure, not the whole map. There's a clever way around this.[1] It supposedly gets optimized so that the iteration quits early, and an array of Result types is not generated and then flattened.
You never really need unwrap, but the "right way" can be verbose.
[1] https://stackoverflow.com/questions/26368288/how-do-i-stop-i...