1

我对 Rust 比较陌生,但成功地使用Rayon并行处理数据。至少只要我正在处理现有的数据结构并且par_iter()开箱即用。现在我已经实现了我自己的struct,它也实现了Iterator

struct TaskQueue {
      // ...
}

impl Iterator for TaskQueue {
    type Item = QueueItem;

    fn next(&mut self) -> Option<QueueItem> {
         // ...
    }
}

该代码适用于普通for item in queue_instance {...}循环。我希望这足以让 Rayon 使用我的代码,但事实并非如此。我必须实现一个ParallelIterator。根据我尝试过的文档

impl ParallelIterator for TaskQueue {
    type Item = QueueItem;

    fn drive_unindexed<C>(self, consumer: C) -> C::Result
        where C: UnindexedConsumer<QueueItem>
    {
        self.next().unwrap()
    }
}

编译器告诉我

<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result 由于返回类型而预期

带有以下提示:

注意:预期类型<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result找到类型QueueItem

注意:考虑将关联类型约束<C as rayon::iter::plumbing::Consumer<QueueItem>>::ResultQueueItem或调用返回的方法<C as rayon::iter::plumbing::Consumer<QueueItem>>::Result

注意:有关更多信息,请访问https://doc.rust-lang.org/book/ch19-03-advanced-traits.html

就我的理解而言::Result,应该是QueueItem,而且我(还)不能从关于高级特征的章节中理解。我必须如何实现该drive_unindexed功能才能使我的代码与 Rayon 一起使用?

4

0 回答 0