Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 实现readtrait:trait绑定的'std::error::error+';静态:std::marker::Sized`不满足_Rust - Fatal编程技术网

Rust 实现readtrait:trait绑定的'std::error::error+';静态:std::marker::Sized`不满足

Rust 实现readtrait:trait绑定的'std::error::error+';静态:std::marker::Sized`不满足,rust,Rust,我想为结构实现Read特性,以便在BufReader中使用它来传递到库。库使用BufReader作为输入,因为它应该与Stdin一起工作,并与实现读取的内存中对象一起工作 use std::error::Error; use std::io::Read; pub struct Test { counter: u8, } impl Test { pub fn new() -> Test { Test { counter: 0 } } } impl

我想为结构实现
Read
特性,以便在
BufReader
中使用它来传递到库。库使用
BufReader
作为输入,因为它应该与
Stdin
一起工作,并与实现
读取的内存中对象一起工作

use std::error::Error;
use std::io::Read;

pub struct Test {
    counter: u8,
}

impl Test {
    pub fn new() -> Test {
        Test { counter: 0 }
    }
}

impl Iterator for Test {
    type Item = String;

    fn next(&mut self) -> Option<Self::Item> {
        if self.counter < 2 {
            self.counter += 1;
            return Some("String".to_string());
        }

        None
    }
}

impl Read for Test {
    fn read(&mut self, buf: &mut [u8]) -> Result<usize, Error> {
        let content = self.next();
        match content {
            None => Err(std::io::Error::new(
                std::io::ErrorKind::Other,
                "End of Iterator",
            )),
            Some(string) => {
                let mut i = 0;
                loop {
                    if i >= buf.len() || i >= string.len() {
                        break;
                    }

                    buf[i] = string[i];
                    i += 1;
                }

                Ok(i)
            }
        }
    }
}

fn main() {
    let test = Test::new();
    let reader = std::io::BufReader::new(test);
    // let filter = lib_that_uses_bufreader::useful_function(reader);
}
我自己构建了这个库,因此可以对它进行更改,但它与Stdin的配合非常好,现在我想将它与struct一起使用。该库使用
BufReader::lines
,因此可以与迭代器交换,但据我所知,这将破坏与
Stdin
的兼容性,因为我只能围绕
Stdin
构建
BufReader
,而不是迭代器

如何解决此错误?哪个错误对象在编译时具有已知的常量大小?

返回

Result<usize, std::io::Error>
一个“特质对象”,但我不明白在这种情况下为什么要这样做。

返回

Result<usize, std::io::Error>
一个“特质对象”,但我不明白你为什么会在这种情况下

Result<usize, Box<dyn Error>>