Rust 如何从异步方法返回简单类型?
示例实现Rust 如何从异步方法返回简单类型?,rust,async-await,Rust,Async Await,示例实现 #[异步特性] 特点,特征{ 异步fn示例\u方法(&self)->bool; } 发布结构示例结构{} #[异步特性] ExampleStruct的impl ExampleTracit{ 异步fn示例\u方法(&self)->bool{ 真的 } } 试图编译此实现时,出现以下错误: async fn example_method(&self) -> bool; ---- type in tr
#[异步特性]
特点,特征{
异步fn示例\u方法(&self)->bool;
}
发布结构示例结构{}
#[异步特性]
ExampleStruct的impl ExampleTracit{
异步fn示例\u方法(&self)->bool{
真的
}
}
试图编译此实现时,出现以下错误:
async fn example_method(&self) -> bool;
---- type in trait
...
async fn example_method(&self) -> bool {
| ^^^^ expected `bool`, found opaque type
|
= note: expected fn pointer `fn(&ExampleStruct) -> bool`
found fn pointer `fn(&ExampleStruct) -> impl Future`
我知道example\u方法中的签名被扩展以返回未来的实现,因此最后一条消息note…
async_trait文档没有解释如何处理这种情况,因为这种情况下。。。有人知道如何解决这个问题吗?问题是您没有将宏引入范围,因此没有执行转换,从而导致错误。如果将async\u trait
引入范围,代码将编译:
使用async\u trait::async\u trait;
#[异步特性]
特点,特征{
异步fn示例\u方法(&self)->bool;
}
发布结构示例结构{}
#[异步特性]
ExampleStruct的impl ExampleTracit{
异步fn示例\u方法(&self)->bool{
真的
}
}
虽然我没有把它放在代码段中,但我正在用你的例子中的use
语句将它纳入范围。但是你的回答让我检查了我是如何将板条箱纳入范围和我的项目的,并注意到我将它放入了[dev dependencies]
(这里我的缺点)。所以问题都在我这边。谢谢你你的例子在操场上起作用:你确定这和你在这里发布的代码是一样的吗?是的(代码是一样的),但我似乎犯了我的错误,它不在片段中,但我把板条箱放进了我的[dev dependencies]
,而不是[dependencies]
,因此,在检查或建造板条箱时,不会将其纳入范围。