这样的单行转换似乎没有办法使用
..。
我不喜欢这样的冗长:
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{}做这件事最短的代码是什么?
发布于 2020-06-03 14:24:49
执行以下操作:
let my_bool = true;
let my_option = my_bool.then_some(MyObject{});
let my_result = my_bool.then_some(MyObject{}).ok_or(MyError{});在撰写本文时,这仍然是实验的一部分。
功能。
发布于 2020-11-26 05:21:45
从Rust 1.50开始,您可以使用
assert_eq!(false.then(|| val), None);
assert_eq!(true.then(|| val), Some(val));您可以将它转换为
通过链接
assert_eq!(false.then(|| val).ok_or(err), Err(err));
assert_eq!(true.then(|| val).ok_or(err), Ok(val));在夜间,您可以使用
并直接传递一个值,而不是创建一个闭包:
#![feature(bool_to_option)]
assert_eq!(false.then_some(val), None);
assert_eq!(true.then_some(val), Some(val));或者,您可以使用
assert_eq!(Some(obj).filter(|_| false), None);
assert_eq!(Some(obj).filter(|_| true).ok_or(err), Ok(obj));发布于 2020-11-25 23:29:56
使用
表达式:
if my_bool { Ok(()) } else { Err(MyError::False) }https://stackoverflow.com/questions/54841351
复制相似问题