无法在Iterator <t>特征对象上调用`map`方法

时间:2017-10-30 06:08:46

标签: rust traits

我正在尝试在Rust中实现通用的弹性分布式数据集(RDD)。我有一个RDD特征:

pub trait RDD<I, O>: Serialize {
    fn compute<II, OI>(&self, iter: II, partition: &Partition, context: &TaskContext) -> OI
    where
        OI: Iterator<Item = O>,
        II: Iterator<Item = I>;
}

然后是MapRDD结构及其RDD特征的实现:

#[derive(Serialize, Deserialize)]
pub struct MapRDD<F, I, O>
where
    F: RDDFunc<(I), O>,
{
    closure: F,
    marker: PhantomData<(I, O)>,
}

impl<F, I, O> RDD<I, O> for MapRDD<F, I, O>
where
    F: RDDFunc<(I), O>,
{
    fn compute<II, OI>(&self, iter: II, partition: &Partition, context: &TaskContext) -> OI
    where
        OI: Iterator<Item = O>,
        II: Iterator<Item = I>,
    {
        return iter.map::<O, FnMut(I) -> O>(|x: I| -> O { self.closure.call((x)) });
    }
}

可能有一些重复数据删除类型提示。代码没有编译:

error: the `map` method cannot be invoked on a trait object
  --> src/rdd/transformations/map.rs:16:25
   |
16 |             return iter.map::<O, FnMut(I) -> O>(|x: I| -> O {
   |

因为会有任意组合的计算结果,Iterator<O>OI被链接以构成工作流程,所以我必须在这里使用通用。

出现此错误的原因是什么?一个特征对象,这里的iter是否可被其底层结构函数使用?

0 个答案:

没有答案