代码之家  ›  专栏  ›  技术社区  ›  hedgar2017

我怎样才能习惯性地将布尔转化为期权或导致生锈?

  •  2
  • hedgar2017  · 技术社区  · 6 年前

    似乎没有办法用 std .

    我不喜欢这种冗长的话:

    match my_bool {
        true => Ok(()),
        false => Err(MyError::False),
    }
    

    我想用一种衬垫,例如:

    let my_bool = true;
    let my_option = my_bool.to_option(MyObject{}); // true => MyObject{}, false => None
    let my_result = my_bool.to_result(MyObject{}, MyError{}); // true => MyObject{}, false => MyError{}
    

    最短的代码是什么?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Lukas Kalbertodt    6 年前

    boolinator crate . 它定义 the extension trait Boolinator 对于 bool 这增加了一些有用的方法。例子:

    use boolinator::Boolinator;
    
    my_bool.as_some(MyObject {});                // Option<MyObject>
    my_bool.as_result(MyObject {}, MyError {});  // Result<MyObject, MyError>
    

    true 价值导向 Some(_) Ok(_) 而A false 价值导向 None Err(_) .

    有一个 issue about adding functionality like this to std 在RFC存储库中。但看起来不是很快就会发生的。

    推荐文章