gpt4 book ai didi

types - 我如何在 Rust 中惯用地将 bool 转换为 Option 或 Result?

转载 作者:行者123 更新时间:2023-11-29 07:50:05 25 4
gpt4 key购买 nike

似乎没有办法使用 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{}

执行此操作的最短代码是什么?

最佳答案

从 Rust 1.50 开始,您可以使用 bool::then :

assert_eq!(false.then(|| val), None);
assert_eq!(true.then(|| val), Some(val));

您可以通过链接 Option::ok_or 将其转换为 Result :

assert_eq!(false.then(|| val).ok_or(err), Err(err));
assert_eq!(true.then(|| val).ok_or(err), Ok(val));

从 Rust 1.62 开始,您可以使用 bool::then_some并直接传递一个值而不是创建一个闭包:

assert_eq!(false.then_some(val), None);
assert_eq!(true.then_some(val), Some(val));

或者,您可以使用 Option::filter :

assert_eq!(Some(obj).filter(|_| false), None);
assert_eq!(Some(obj).filter(|_| true).ok_or(err), Ok(obj));

关于types - 我如何在 Rust 中惯用地将 bool 转换为 Option 或 Result?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com