Rust 我如何拥有一个struct';s字段是否是'T'元素上的'Iterator'?

Rust 我如何拥有一个struct';s字段是否是'T'元素上的'Iterator'?,rust,Rust,我希望结构的字段是T元素上的Iterator,但是Iterator没有类型参数。我知道我试图做一些根本错误的事情,但是呢?在Rust中,Iterator(更具体地说是Iterator,其中T是迭代时产生的类型)是一种特征。表示迭代器的类型实现了这个特性 这是一个更一般的问题“如何在结构中存储特征值?”。我故意用一种不精确的方式来表达这个问题——我们实际上想要的是存储实现这个特性的类型的值,大致有两种方法 把它放在盒子里 最简单的方法是使用框。框表示一个拥有的指针,当您有一个指向trait对象的指

我希望结构的字段是
T
元素上的
Iterator
,但是
Iterator
没有类型参数。我知道我试图做一些根本错误的事情,但是呢?

在Rust中,
Iterator
(更具体地说是
Iterator
,其中
T
是迭代时产生的类型)是一种特征。表示迭代器的类型实现了这个特性

这是一个更一般的问题“如何在结构中存储特征值?”。我故意用一种不精确的方式来表达这个问题——我们实际上想要的是存储实现这个特性的类型的值,大致有两种方法

把它放在盒子里 最简单的方法是使用
表示一个拥有的指针,当您有一个指向trait对象的指针时,Rust会创建一个“胖指针”,其中包含有关该类型的运行时信息。这样,迭代器的具体类型在编译时是未知的

定义如下:

struct IteratorHolder {
    iter: Box<Iterator<Item = u32>>,
}
struct IteratorHolder{
国际热核实验堆:盒子,
}
使用方法:

let ih = IteratorHolder { iter: Box::new(0..10) };
println!("{:?}", ih.iter.collect::<Vec<_>>());
let ih = IteratorHolder { iter: 0..10 };
println!("{:?}", ih.iter.collect::<Vec<_>>());
let ih=IteratorHolder{iter:Box::new(0..10)};
普林顿!(“{:?}”,ih.iter.collect::());
仿制药 做同样事情的另一种方法是使用泛型结构,同时避免在堆上分配任何框。这样我们将有一些类型实现
迭代器
,具体是什么将在编译时确定

定义:

struct IteratorHolder<I: Iterator<Item = u32>> {
    iter: I,
}
struct IteratorHolder{
国际热核实验堆:我,
}
使用方法:

let ih = IteratorHolder { iter: Box::new(0..10) };
println!("{:?}", ih.iter.collect::<Vec<_>>());
let ih = IteratorHolder { iter: 0..10 };
println!("{:?}", ih.iter.collect::<Vec<_>>());
let ih=IteratorHolder{iter:0..10};
普林顿!(“{:?}”,ih.iter.collect::());