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]
,因此,在检查或建造板条箱时,不会将其纳入范围。