首页 > 解决方案 > 有什么作用??生锈吗?

问题描述

这是它的一个例子

let msg = stream.next().await.context("expected a message")??;

只是?做了两次吗?如果是这样,为什么在这种情况下需要这样做?

标签: rustoperator-keyword

解决方案


是的,只是?做了两次;没有??运营商。

stream是一个WsStreamWsStream是在同一模块中定义的类型。WsStream实现Stream

stream.next()调用StreamExt::next,它返回一个产生的未来Option<Self::Item>Self::Item被定义为tungstenite::Result<Message>( = Result<Message, tungstenite::Error>) WsStream。这意味着 的结果stream.next().await是 type Option<Result<Message, tungstenite::Error>>

然后,context应用于该值。Context实现了 forOption<T>和 for Result<T, E>,但输出始终是 a Result。但是,context不会使任何东西变平,所以我们最终得到Result<Result<Message, tungstenite::Error>, anyhow::Error>. 因此 的两个用途?用于处理Results 的两个级别。


推荐阅读