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

Nol*_*rin 2 reference traits rust

我有一个foo实现特征的reference()IntoIterator<Item = &T>.我想into_iter直接调用trait方法foo(即引用本身)而不是*foo(引用的值),因为似乎正在发生,因为类型*foo也实现IntoIterator(尽管有Item = T).我尝试过UFCS,但即便如此也不行.

这是我的实际代码:

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

Nol*_*rin 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()), ",")
}
Run Code Online (Sandbox Code Playgroud)

我会留在这里以防万一它偶然帮助别人.