gpt4 book ai didi

rust - 为什么不能用if完成呢?

转载 作者:行者123 更新时间:2023-12-03 11:44:39 26 4
gpt4 key购买 nike

我正在尝试处理从异步调用收到的错误:

let res: Result<TcpStream, Box<dyn std::error::Error>> = session.runtime().borrow_mut().block_on(async {
let fut = TcpStream::connect(session.configuration().socket()).await?;
Ok(fut)
});
我尝试用if来做旧的方式,但是编译器不喜欢它:
if res.is_err() {
return Err(res);
}
经过一番谷歌搜索后,我发现:
let mut stream = match res {
Ok(res) => res,
Err(res) => return Err(res),
};
感觉几乎一样,但与Rusts等效于switch语句。为什么我不能使用 if

最佳答案

if res.is_err() { return res }应该可以工作。 Result是一个具有两个变体的枚举:习惯上保存“成功”结果的Ok,以及保存错误信息的Err。与John pointed out一样,将现有的Result(恰好包含Err)包装在另一个Err结果中是没有道理的-更确切地说,是与该函数的返回类型不匹配的。
当使用match时,将结果解压缩为它的组成值,然后在错误的情况下将其重新打包为一个新结果。注意,可以使用 match operator代替?语句,它将声明压缩为:

let mut stream = res?;

关于rust - 为什么不能用if完成呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64323838/

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