簡體   English   中英

對於必須實現“iter”函數的類型,我應該使用哪個特征綁定

[英]Which trait bound should I use for a type that must implement the "iter" function

我正在嘗試實現一個由泛型字段組成的結構,該類型必須實現非消耗的“iter”方法(見下文)。

struct Node<T> {
    key: T
}

impl<T> Node<T> where T: ?? {
    fn do_stuff(&self) {
        for e in self.key.iter() {
            /* ... */
        }
    }
}

fn main() {
    let n1 = Node { key: "foo".to_owned() };
    n1.do_stuff();
    
    let n2 = Node { key: vec![1, 2, 3] };
    n2.do_stuff();
}

我應該將哪個特征邊界與參數T相關聯?

您正在尋找的 trait bound 是&T: IntoIterator 作為慣例,提供非消費iter()還提供IntoIterator實現以引用該類型。 (同樣, iter_mut()等價於&mut T IntoIterator 。)

例如:

impl<T> Node<T>
where
    for<'a> &'a T: IntoIterator,
{
    fn do_stuff(&self) {
        for e in &self.key { /* ... */ }
    }
}

但是請注意,這不會使用key: "foo".to_owned()編譯,因為String不可迭代。

我應該將哪個特征邊界與參數T相關聯?

標准庫中沒有這樣的特征, iter()是一個固有的方法——它不是來自特征實現。 當然,您可以創建自己的特征(例如, Iter )來指定iter()

如果您正在使用泛型類型並需要確保此類類型的值可以轉換為迭代器,您可能需要考慮將類型IntoIteratorIntoIterator特征。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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