【问题标题】:rust cannot implement From for type of generic typerust 无法为泛型类型实现 From
【发布时间】:2020-04-09 20:35:31
【问题描述】:

我正在尝试实现 From 特征,它将任何具有 Item = String 的迭代器作为输入,但如果我传入 Args 类型的迭代器,编译器会告诉我:

error[E0277]: the trait bound `Data: std::convert::From<std::boxed::Box<std::env::Args>>` is not satisfied
  --> src\main.rs:19:20
   |
19 |     let arg_data = Data::from(Box::new(std::env::args()));
   |                    ^^^^^^^^^^ the trait `std::convert::From<std::boxed::Box<std::env::Args>>` is not implemented for `Data`
   |
   = help: the following implementations were found:
             <Data as std::convert::From<std::boxed::Box<(dyn std::iter::Iterator<Item = std::string::String> + 'static)>>>
   = note: required by `std::convert::From::from`

我的代码是:


struct Data {
    strings: Vec<String>,
}

impl From<Box<dyn Iterator<Item = String>>> for Data {
    fn from(string_iterator: Box<dyn Iterator<Item = String>>) -> Self {
        let mut vector = Vec::new();

        for s in string_iterator {
            vector.push(s)
        }

        Data { strings: vector }
    }
}

fn main() {
    let arg_data = Data::from(Box::new(std::env::args()));

    for a in arg_data.strings {
        println!("{}", a);
    }
}

我该如何解决这个问题?

【问题讨论】:

    标签: generics rust


    【解决方案1】:

    我可以解决它,但我不是一个泛型专家,不知道为什么需要这样。

    改成

    let arg_data = Data::from(Box::new(std::env::args()) as Box<dyn Iterator<Item = String>>);
    
    

    https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=341162e238fde6ef56a49ebd5a48fa16

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多