我有一个函数,它返回Option<Result<X, String>>
,它调用了一些返回Result<Y, String>
的函数。如何使用?
运算符,它将错误 Package 在Some
中?
fn other_func() -> Result<Y, String> {
// ...
}
fn my_func() -> Option<Result<X, String>> {
// ...
let value = other_func()?;
// ...
}
我有两个问题:
- 我不知道如何将
?
Package 在Some
中 Result<X, String>
与Result<Y, String>
不同,但由于我只关心此时的错误,所以这应该无关紧要
我可以通过组合匹配和返回来解决这个问题,但是如果可能的话,我想使用?
。这是我目前的解决方案:
let value = match other_func() {
Ok(value) => value,
Err(msg) => return Some(Err(msg))
};
2条答案
按热度按时间omqzjyyz1#
使用
?
运算符是不可能的,您必须执行当前的解决方案。下面是有关
?
运算符的一些信息:https://doc.rust-lang.org/rust-by-example/std/result/question_mark.html-它只是语法上的糖因此将
Err
Package 到Some(err)
中的唯一方法是像之前那样手动匹配。gcuhipw92#
您可以使用传回
Result<Option<X>, String>
的Helper函式或闭包,然后呼叫transpose()
。例如:如果闭包的这种用法太模糊,可以简单地定义一个内部的
fn helper()
并调用helper().transpose()
(或者在my_func
外部定义帮助器)。