Rust 什么是??你喜欢生锈吗?
以下是一个例子: 只是Rust 什么是??你喜欢生锈吗?,rust,operator-keyword,Rust,Operator Keyword,以下是一个例子: 只是?做了两次?如果是这样的话,为什么在这种情况下需要这样做呢?它大约是一个,因此可以扩展为: let msg = try!(stream.next().await.context("expected a message")).unwrap(); 对于异步代码,您经常会看到等待?,但是等待???看起来确实很奇怪。是的,只是?被执行了两次;没有??操作员 stream是一个WsStreamWsStream是在同一模块中定义的类型WsStream实现流 str
?
做了两次?如果是这样的话,为什么在这种情况下需要这样做呢?它大约是一个,因此可以扩展为:
let msg = try!(stream.next().await.context("expected a message")).unwrap();
对于异步代码,您经常会看到
等待?
,但是等待???
看起来确实很奇怪。是的,只是?
被执行了两次;没有??操作员
stream
是一个WsStream
WsStream
是在同一模块中定义的类型<代码>WsStream
实现流
stream.next()
调用,它返回一个产生选项的未来<代码>自我::项
被定义为WsStream
的tungstenite::结果
(=Result
)。这意味着stream.next().await
的结果类型为Option
然后,在值上应用<代码>上下文
是为选项
和结果
实现的,但输出始终是结果
。然而,context
并不能使任何东西变得平坦,所以我们最终得到的结果是Result
。因此,?
的两个用法用于处理两个级别的结果。是的,只是?
操作符执行了两次。一个简单的例子:
fn result_of_result() -> Result<Result<i32, String>, String> {
Ok(Ok(42))
}
fn f() -> Result<(), String> {
println!("{:?}", result_of_result());
println!("{:?}", result_of_result()?);
println!("{:?}", result_of_result()??);
Ok(())
}
fn main() {f();}
fn result_of_result() -> Result<Result<i32, String>, String> {
Ok(Ok(42))
}
fn f() -> Result<(), String> {
println!("{:?}", result_of_result());
println!("{:?}", result_of_result()?);
println!("{:?}", result_of_result()??);
Ok(())
}
fn main() {f();}
Ok(Ok(42))
Ok(42)
42