当前位置:  开发笔记 > 后端 > 正文

用monad解开匹配语句

如何解决《用monad解开匹配语句》经验,为你挑选了1个好方法。

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

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

这是我到目前为止所处的地方.它有效,但我无法弄清楚如何删除unwrap()调用以使其在功能上与原始版本相同.

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

PS:你会如何建议直觉来做这种事情?我经常遇到Rust的这些问题,而且总是很困难.



1> codemaker..:

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

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

至于发展直觉,这需要时间.继续阅读和编写防锈代码(以及其他函数语言的代码),这种直觉将会出现.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有