注意:自Rust 1.0以来,此问题已过时。现在,Iterator特质拥有一个关联类型Item,而不是类型参数,并且添加了一个适用于Box 的通用Iterator实现。
我想定义一个返回迭代器的特质方法。我想避免具体指定实际返回类型,因此在我们拥有未打包的抽象返回类型之前,我使用特质对象。这意味着该方法返回Box >类型。但是我不知道如何使用打包的特质对象。我无法迭代Box >类型的对象。
我想定义一个返回迭代器的特质方法。我想避免具体指定实际返回类型,因此在我们拥有未打包的抽象返回类型之前,我使用特质对象。这意味着该方法返回Box >类型。但是我不知道如何使用打包的特质对象。我无法迭代Box >类型的对象。
fn main() {
let xs = vec![0u, 1, 2, 3];
let boxed_iter = box xs.iter() as Box<Iterator<&uint>>;
for x in boxed_iter {}
}
出现了错误:"for" loop expression does not implement the "Iterator" trait
。
我的问题是:如何迭代 Box<Iterator<A>>
。或者更普遍地说,如何使用盒式特征对象?
rustc --explain E0244
查看详细解释 lib.rs:10:12: 10:23 错误:类型参数数量错误:期望 0,实际上是 1 [E0244] lib.rs:10 impl<A, I: Iterator<A>> MyIter<A> for I {} ^~~~~~~~~~~ - NBcoderustc --explain E0244
查看详细解释 lib.rs:13:29: 13:38 错误:必须指定关联类型Item
(来自 traitcore::iter::Iterator
)的值 [E0191] lib.rs:13 impl<A> Iterator<A> for Box<MyIter<A>> { ^~~~~~~~~ lib.rs:13:9: 13:20 错误:类型参数数量错误:期望 0,发现 1 [E0244] lib.rs:13 impl<A> Iterator<A> for Box<MyIter<A>> { ^~~~~~~~~~~ - NBcodeBox<Iterator>
实现了Iterator
,所以这个问题不再相关。 - BurntSushi5