gpt4 book ai didi

asynchronous - 串的Rust future

转载 作者:行者123 更新时间:2023-12-03 11:42:58 25 4
gpt4 key购买 nike

我一直在尝试理解futures(0.3版),但无法使其正常工作。据我了解,仅当A类型实现future trait时,函数才能返回A类型的future。如果我创建一个结构并实现将来的特性,那没关系,但是为什么String不起作用?

use futures::prelude::*;

async fn future_test() -> impl Future<Output=String> {
return "test".to_string();
}
我得到了错误:
the trait bound `std::string::String: core::future::future::Future` is not satisfied

the trait `core::future::future::Future` is not implemented for `std::string::String`

note: the return type of a function must have a statically known sizerustc(E0277)
所以我告诉自己,好的,然后我可以像下面这样使用 Box:
async fn future_test() -> impl Future<Output=Box<String>> {
return Box::new("test".to_string());
}
但是错误是相同的:
the trait bound `std::string::String: core::future::future::Future` is not satisfied

the trait `core::future::future::Future` is not implemented for `std::string::String`

note: the return type of a function must have a statically known sizerustc(E0277)
我究竟做错了什么?以及为什么 future 会保留 String而不是 Box本身?

最佳答案

当一个函数被声明为async时,它隐式返回一个future,并将该函数的返回类型作为其Output类型。因此,您可以编写以下函数:

async fn future_test() -> String {
"test".to_string()
}
或者,如果您想将返回类型明确指定为 Future,则可以删除 async关键字。如果这样做了,则还需要构造一个Future来返回,并且您将无法在函数内部使用 await
fn future_test2() -> impl Future<Output=String> {
ready("test2".to_string())
}
请注意, futures::ready构造了一个立即可用的Future,在这种情况下是合适的,因为此函数中没有实际的异步 Activity 。
Link to Playground

关于asynchronous - 串的Rust future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62972822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com