rust stable core 参考导读 | bool

18 阅读1分钟

版本:1.90.0

参考文档:bool - Rust


rust 的 bool 类型是一个 truefalse 的值,可以用于控制语句。

可以运算,或借助 From<bool> 的实现转化成 10

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