[英]How do I call a trait method on a reference and not the referenced value?
我有一个实现特征IntoIterator<Item = &T>
的引用( foo
)。 我想直接在foo
(即引用本身)而不是*foo
(引用的值)上调用trait方法into_iter
,这似乎正在发生,因为*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()), ",")
}
由于@LukasKalbertodt的有用评论,我在发布此问题后最终解决了该问题。 事实证明,我只是希望类型绑定为&V: IntoIterator<Item = &T>
,以匹配函数体中的预期用法(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()), ",")
}
我会把它留在这里,以防它偶然帮助别人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.