rust不能为泛型类型的类型实现From



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

error[E0277]: the trait bound `Data: std::convert::From<std::boxed::Box<std::env::Args>>` is not satisfied
--> srcmain.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);
}
}

我该如何解决这个问题?

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

更改为

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

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

最新更新