gpt4 book ai didi

rust - StreamExt::forward 失败,错误为 `expected integer, found enum ` std::result::Result``

转载 作者:行者123 更新时间:2023-12-04 02:02:28 26 4
gpt4 key购买 nike

我正在尝试将 rust future 流(重复)连接到水槽(排水管)。第一种方法工作正常(检查下面),但第二种使用 .forward 的方法无法编译(错误显示为内联)。关于我做错了什么的任何指示?

use futures::stream::StreamExt;
use futures::sink::SinkExt;
use futures::executor;

fn main() {
executor::block_on( async {
// works
let mut work = futures::stream::repeat(5);
let mut drain = futures::sink::drain();
match drain.send(work.next()).await {
Ok(_r) => println!("Done"),
Err(_e) => println!("Error"),
};

// works
let res: Vec<i32> = futures::stream::repeat(5).take(3).collect::<Vec<i32>>().await;
println!("{:?}", res);

// doesn't work
// futures::stream::repeat(5).forward(futures::sink::drain());
// ^^^^^^^ expected integer, found enum `std::result::Result`
// error[E0271]: type mismatch resolving `<futures_util::stream::repeat::Repeat<{integer}> as futures_core::stream::Stream>::Item == std::result::Result<_, _>`

// Fixed above with repeat(Ok(5)) but not repeat(5)
match futures::stream::repeat(Ok(5)).take(3).forward(futures::sink::drain()).await {
Ok(_r) => println!("Done"),
Err(_e) => println!("Error"),
};
});
}

相关文档

最佳答案

我猜你想要更像这样的东西?

use futures::stream::StreamExt;
use futures::sink::SinkExt;

#[tokio::main]
async fn main() {
// works
let mut work = futures::stream::repeat(5);
let mut drain = futures::sink::drain();
match drain.send(work.next()).await {
Ok(_r) => println!("Done"),
Err(_e) => println!("Error"),
};
// doesn't work

futures::stream::repeat(Ok(5)).forward(futures::sink::drain());
}

如错误(有点令人困惑)所示,在这种情况下,重复调用必须采用 Result 参数。

关于rust - StreamExt::forward 失败,错误为 `expected integer, found enum ` std::result::Result``,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59751192/

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