版本:1.90.0
参考文档:bool - Rust
rust 的 bool 类型是一个 true 或 false 的值,可以用于控制语句。
可以运算,或借助 From<bool> 的实现转化成 1 和 0。
bool 的文档写得很简单。准备只介绍两个方法。
一个是
pub fn then_some<T>(self, t: T) -> Option<T>
另一个是
pub fn then<T, F: FnOnce() -> T>(self, f: F) -> Option<T>
好像后者只是比前者多了一个类型上有 FnOnce() 的参数。
它们都是针对可选类 Option<T> 的。至于结果是不是空,由这个布尔值决定。区别是,返回结果还是返回闭包。(?
#![allow(unused)]
fn main() {
let mut a = 0;
let mut function_with_side_effects = || { a += 1; };
true.then_some(function_with_side_effects());
false.then_some(function_with_side_effects());
// `a` 被急切求值
assert_eq!(a, 2);
true.then(|| { a += 1; });
false.then(|| { a += 1; });
// `a` 增值一次,考虑到这个闭包被懒加载
assert_eq!(a, 3);
}
根据原文的例子,大概是知道了,嗯,后者好像只能接受闭包(因为 T 按默认有 Sized 特质),而本质区别是,参数是否在被传入前计算,也就是求值的懒性。
所以说,如果要急切求值,用 then_some,或者如果要惰性求值,用 then。