rust - StreamExt::forward 失败,错误为 `expected integer, found enum`std::result::Result`
问题描述
我正在尝试将 rust 期货流(重复)连接到接收器(排水管)。第一种方法工作正常(检查下面),但第二种.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
参数。
推荐阅读
- python - 未安装 Django mysqlclient
- ios - 如何将相机坐标转换为场景的坐标空间?
- python - 用给定的 XOR 计算所有对
- javascript - localStorage 在 JavaScript 中不起作用
- javascript - ExtJs:未显示商店数据
- c# - C# 方法不遵循顺序
- javascript - 为许多视频初始化时如何获取 Plyr 当前实例
- android - 如何暂停 for 循环的完成,直到满足 AudioIsCompletedCondition
- ios - 如何在 iOS 上的 mapView 上添加固定栏
- php - Laravel 迁移名称太长