[英]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()
。
如果您正在使用泛型類型並需要確保此類類型的值可以轉換為迭代器,您可能需要考慮將類型IntoIterator
到IntoIterator
特征。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.