gpt4 book ai didi

error-handling - 用 monad 解开匹配语句

转载 作者:行者123 更新时间:2023-11-29 08:03:13 25 4
gpt4 key购买 nike

我正在尝试简化以下代码:

fn foo(a: i32) -> Option<i32> {
match bar() {
None => None,
Some(strct) => match strct.field {
None => None,
Some(field) => Some(a * field),
}
}
}

这是我到目前为止的进展。它有效,但我不知道如何删除 unwrap() 调用以使其在功能上与原始版本相同。

fn foo(a: i32) -> Option<i32> {
bar().and_then(|strct| Some(a * strct.field.unwrap()))
}

P.S.:您建议如何获得关于做这类事情的直觉?我经常遇到 Rust 的这些问题,这总是很困难。

最佳答案

这里你应该使用 map 而不是 unwrap。

fn foo(a: i32) -> Option<i32> {
bar().and_then(|s| s.field.map(|f| a * f))
}

至于培养直觉,这需要时间。继续阅读和编写 Rust 代码(以及其他函数式语言的代码),这种直觉就会出现。

关于error-handling - 用 monad 解开匹配语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com