rust - 如何从实现该特征的结构迭代器中收集特征向量

标签 rust iterator traits

我正在尝试从实现该特征的结构迭代器中获取特征向量。
到目前为止,我能够做到这一点:

    fn foo() -> Vec<Box<dyn SomeTrait>> {
        let v: Vec<_> = vec![1]
            .iter()
            .map(|i| {
                let b: Box<dyn SomeTrait> = Box::new(TraitImpl { id: *i });
                b
            })
            .collect();
        v
    }

但是,我想使其更加简洁。

最佳答案

这对我有用。 Playground
尽管我不是Rust专家,所以我不确定'staticfoo<S: SomeTrait + 'static>的限制

trait SomeTrait { fn echo(&self); }
impl SomeTrait for u32 {
    fn echo(&self) {
        println!("{}", self);
    }
}

fn foo<S: SomeTrait + 'static>(iter: impl Iterator<Item=S>) -> Vec<Box<dyn SomeTrait>> {
    iter.map(|e| Box::new(e) as Box<dyn SomeTrait>).collect()
}

fn main() {
    let v = vec!(1_u32, 2, 3);
    let sv = foo(v.into_iter());
    sv.iter().for_each(|e| e.echo());
}

关于rust - 如何从实现该特征的结构迭代器中收集特征向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63088520/

相关文章:

formatting - 如何将带符号的整数格式化为带符号的十六进制表示形式?

java - 如何初始化一个迭代器

python - 我在 Python 的 itertools 中找不到 imap()

scala - Scala 中的对象如何转换为它自己的类型和任何不相关特征的交集?

syntax - 带有方法调用语法的 Rust 类型提示

rust - 我们如何在多个调用中保存和检索结构中的变量?

rust - 如何指定一个接受引用并返回实现与引用具有相同生命周期的特征的任何类型的闭包?

rust - 如何在 WebAssembly 中从 Rust 返回一个字符串(或类似字符串)?

c++ - 是否可以推断出 std::insert_iterator 包含的类型?

generics - 如何使用开放式类型在 Julia 中编写 Trait?