generics - rust 无法为泛型类型实现 From
问题描述
我正在尝试实现 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);
}
}
我该如何解决这个问题?
解决方案
我可以解决它,但我不足以成为泛型专家知道为什么需要这样。
改成
let arg_data = Data::from(Box::new(std::env::args()) as Box<dyn Iterator<Item = String>>);
推荐阅读
- java - Eclipse 无法识别 smartcardio 库
- java - 数组中的 MongoDB Projections.elemMatch 返回空文档
- html - 405 在 Apache 身份验证中不允许获取
- javascript - 将时间间隔(例如:hh24:mm-hh24:mm)从一个时区转换为另一个(javascript)
- python - Python:将图形的纵横比设置为1
- python - 如何使用 selenium 从字符串中提取数字?
- android - Firebase Analytics 如何计算(唯一)用户
- python-3.x - 如何打印嵌套字典元素?
- javascript - 如何在 xstate 中重用状态转换?
- google-chrome-devtools - 在计算机之间导入/导出 Chrome devtools 断点和设置