Reference 如何对引用而不是引用值调用trait方法?

Reference 如何对引用而不是引用值调用trait方法?,reference,rust,traits,Reference,Rust,Traits,我有一个引用(foo),它实现了traitIntoIterator。我想直接在foo(即引用本身)上将trait方法调用到iter,而不是*foo(引用值),因为*foo的类型也实现了到迭代器(尽管带有Item=T)。我试过UFC,但即使这样也不管用 这是我的实际代码: fn csl_join<'a, V, T>(value: &V) -> String where V: IntoIterator<Item = &'a T>,

我有一个引用(
foo
),它实现了trait
IntoIterator
。我想直接在
foo
(即引用本身)上将trait方法
调用到iter
,而不是
*foo
(引用值),因为
*foo
的类型也实现了
到迭代器
(尽管带有
Item=T
)。我试过UFC,但即使这样也不管用

这是我的实际代码:

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()), ",")
}
fn csl\u连接,
T:'a+ToString
{
itertools::join(value.into_iter().map(|v:&T|v.to_string()),“,”)
}

由于@LukasKalbertodt的有益评论,我在发布后就解决了这个问题。事实证明,我只是希望将类型绑定为
&V:IntoIterator
,以匹配函数体中的预期用途(duh!)

因此,代码变成:

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()), ",")
}
fn csl\u连接(值:&'a V)->字符串
其中V:a,

&我不太确定你想要实现什么
&V
没有方法
进入iter
,因为它没有实现
进入迭代器
V
之所以有上述方法,是因为它实现了上述特征。另外:
&IntoIterator
&V之间有一个重要的区别,其中V:IntoIterator
。因此,对于我不是唯一一个困惑的读者的情况:你能澄清一下这个问题吗?:)@卢卡斯:我的错。我在这方面太愚蠢了!我将删除这个问题,谢谢你指出。或者换一种方式:当调用
value
而不是
*value
时,你希望在行为上有什么不同?好的,当然,很高兴我能帮忙(尽管你可以保留这个问题来分享知识?@LukasKalbertodt:当然,解决方案是将绑定更改为
&V:IntoIterator…
,我想这很明显不过现在很晚了,我没在想。然后我只需要添加一些显式类型参数。但是如果你仍然认为发布代码是有帮助的,我可以这样做。