#chaining #combinator #result #options

intoif

根据用户指定的条件,从任何类型构建Option和Result的小型库

1个稳定版本

1.0.0 2019年11月17日

#19 in #chaining

41 每月下载量

MIT 协议

6KB
59

intoif

此库提供了两个方便的特性,允许您根据提供的谓词将值转换为Option或Result。它与boolinator crate有些相似,但您不需要创建布尔值——谓词会为您完成。这在例如编写一个以fold结束的长链,您想将其转换为Option或Result时很有用。

use intoif::IntoOption;
use boolinator::Boolinator;

fn fizz_buzz(n: u32) -> String {
    [(3, "Fizz"), (5, "Buzz")]
        .iter()
        .filter_map(|(x, s)| (n % x == 0).as_some(*s))
        .collect::<String>()
        .none_if(String::is_empty)
        .unwrap_or_else(|| n.to_string())
}

lib.rs:

此库提供了两个方便的特性,允许您根据提供的谓词将值转换为OptionResult。它与boolinator crate有些相似,但您不需要创建布尔值——谓词会为您完成。这在例如编写一个以fold结束的长链,您想将其转换为OptionResult时很有用。

use intoif::IntoOption;

fn fizz_buzz(n: u32) -> String {
    [(3, "Fizz"), (5, "Buzz")]
        .iter()
        .filter_map(|(x, s)| if n % x == 0 { Some(*s) } else { None })
        .collect::<String>()
        .none_if(String::is_empty)
        .unwrap_or_else(|| n.to_string())
}

无运行时依赖