如何在引用上调用特征方法而不是引用的值?

时间:2016-10-14 00:04:31

标签: reference rust traits

我有一个实现特征foo的引用(IntoIterator<Item = &T>)。我想直接在into_iter(即引用本身)而不是foo(引用的值)上调用特征方法*foo,因为似乎正在发生,因为{{1}的类型1}}也实现*foo(尽管有IntoIterator)。我已经尝试过UFCS了,但即便如此,似乎并没有做到这一点。

这是我的实际代码:

Item = T

1 个答案:

答案 0 :(得分:5)

在发布之后我终于解决了这个问题,感谢@LukasKalbertodt的有用评论。事实证明,我只是希望类型绑定为&V: IntoIterator<Item = &T>,以匹配函数体中的预期用法(呃!)。

所以代码变成:

fn csl_join<'a, 'b, V, T>(value: &'a V) -> String
    where V: 'a,
          &'a V: IntoIterator<Item = &'b T>,
          T: ToString + 'b
{
    itertools::join(value.into_iter().map(|v: &T| v.to_string()), ",")
}

如果它偶然帮助别人,我会把它留在这里。