and*_*y g 2 error-handling rust
我正在尝试简化以下代码:
fn foo(a: i32) -> Option<i32> {
match bar() {
None => None,
Some(strct) => match strct.field {
None => None,
Some(field) => Some(a * field),
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所处的地方.它有效,但我无法弄清楚如何删除unwrap()调用以使其在功能上与原始版本相同.
fn foo(a: i32) -> Option<i32> {
bar().and_then(|strct| Some(a * strct.field.unwrap()))
}
Run Code Online (Sandbox Code Playgroud)
PS:你会如何建议直觉来做这种事情?我经常遇到Rust的这些问题,而且总是很困难.
在这里你应该使用map而不是unwrap.
fn foo(a: i32) -> Option<i32> {
bar().and_then(|s| s.field.map(|f| a * f))
}
Run Code Online (Sandbox Code Playgroud)
至于发展直觉,这需要时间.继续阅读和编写防锈代码(以及其他函数语言的代码),这种直觉将会出现.