2016-04-17 24 views
7

Bir vektörün (diğer koleksiyon türleri arasında) Iterator olduğunu belirtmekte doğru mudur? ÖrneğinRust, vektör bir yineleyici mi?

, elimden şu şekilde bir vektör üzerinde döngü, bu Iterator özelliği (Anladığım kadarıyla) uygulayan çünkü: Ben parçası olan işlevleri kullanmak istiyorsanız, Ancak

let v = vec![1, 2, 3, 4, 5]; 

for x in &v { 
    println!("{}", x); 
} 

Iterator özelliğiyle (örneğin, fold, map veya filter) neden bu vektör üzerine iter() numaralı telefonu aramalıyım?

Yaptığım başka bir düşünce belki de bir vektörün Iterator'a dönüştürülebilmesiydi ve bu durumda yukarıdaki sözdizimi daha mantıklı.

+1

https://doc.rust-lang.org/book/iterators.html, x için v.iter() x için x için & v 'vs. Rust'u (henüz) tanımıyorum, bu yüzden aslında açıklayamam ya da özetleyemem! –

cevap

20

Hayır, bir vektör bir yineleyici değil.

Ama for döngü gerekli yineleyici vektörün dönüştürmek için kullandığı özellik IntoIterator, uygular. documentation for Vec yılında

Eğer IntoIterator üç şekilde uygulandığını görebilirsiniz: &mut Vec<T> için, Vec<T> için hareket ettirildiği ve yineleyici yineleyici döndürür başvuruları &T paylaşılan ortak referans &Vec<T> için, tip T öğeleri döndürür ve Değişken referanslar döndürülür.

iter(), Vec<T>'u dönüştürmek için Vec biçimindeki bir yöntemdir ve bir referansa dönüştürmeden önce paylaşılan başvuruları döndüren bir yineleyiciye doğrudan. Değiştirilebilir referanslar üretmek için bir kardeş metodu iter_mut() bulunmaktadır.