簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM