有什么作用??生锈吗?

Wil*_*ill 2 operator-keyword rust

这里是它的一个例子动作

let msg = stream.next().await.context("expected a message")??;
Run Code Online (Sandbox Code Playgroud)

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

Fra*_*gné 5

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

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

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

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