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

标签 rust future

我正在尝试将 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/

相关文章:

json - 如何在 Rust 中使用 reqwest 反序列化任意 json 结构?

rust - libgcc和Rust系统库中 `__udivti3'的多个定义

list - flutter : How put received data on model as nested List

java - 遍历 List<Future> 对象抛出 IndexOutOfBounds 异常

multithreading - Clojure 可变存储类型

C++ future 调用局部变量

rust - 如何确保在每次迭代后释放每个 `Child` 进程的文件句柄?

rust - 实现返回泛型的特征函数

scala - 等待所有的Future.onComplete回调执行完毕

rust - 特征对象和特征的直接实现者的特征实现