Rust 如何解释read#u until的签名以及什么是AsyncRead+;东京的BufRead?

Rust 如何解释read#u until的签名以及什么是AsyncRead+;东京的BufRead?,rust,rust-tokio,Rust,Rust Tokio,我试图理解Rust中的异步I/O。下面的代码基于Katharina Fey的代码片段 这对我来说很有用: use futures::future::Future; use std::io::BufReader; use tokio::io::*; fn main() { let reader = BufReader::new(tokio::io::stdin()); let buffer = Vec::new(); println!("Type something:"

我试图理解Rust中的异步I/O。下面的代码基于Katharina Fey的代码片段 这对我来说很有用:

use futures::future::Future;
use std::io::BufReader;
use tokio::io::*;

fn main() {
    let reader = BufReader::new(tokio::io::stdin());
    let buffer = Vec::new();

    println!("Type something:");
    let fut = tokio::io::read_until(reader, b'\n', buffer)
        .and_then(move |(stdin, buffer)| {
            tokio::io::stdout()
                .write_all(&buffer)
                .map_err(|e| panic!(e))
        })
        .map_err(|e| panic!(e));

    tokio::run(fut);
}
在找到代码之前,我试图从文档中找出它

如何解释
read_until
的签名,以便在上面的代码示例中使用它

pub fn read_until<A>(a: A, byte: u8, buf: Vec<u8>) -> ReadUntil<A> 
where
    A: AsyncRead + BufRead, 
pub-fn-read_-until(a:a,字节:u8,buf:Vec)->ReadUntil
哪里
A:AsyncRead+BufRead,
具体来说,通过阅读文档,我如何知道传递到
和_then
闭包中的参数是什么,以及预期的结果

参数设置为
,然后
不幸的是,Rust文档的标准布局使得未来很难遵循

从您链接的文档开始,我可以看到它返回
ReadUntil

此返回值描述为:

一种可用于将流的内容轻松读入向量直到达到分隔符的未来

我希望它能实现
未来
特性——我可以看到它确实做到了。我还假设未来解析为的
是某种向量,但我不知道具体是什么,所以我继续挖掘:

  • 首先,我在“Trait实现”下查找
    impl

    传入的闭包
    f
    Self::Item
    作为参数。我刚刚发现
    Item
    (A,Vec)
    ,所以我希望写一些类似
    。然后(|(reader,buffer){/*…/*})

    AsyncRead
    +
    BufRead
    这就限制了什么类型的读卡器可以被读取。所创建的实现


    很有帮助,Tokio提供了这样我们就不用担心了,我们可以继续使用
    BufReader

    非常有帮助!面包屑线索帮助我查看[+]并遵循参数引用语法。我建议对其进行编辑以供将来的读者了解,并测试我对闭包语法的理解——谢谢!