Iterator
ویژگی 'Iterator' از تکرار بیش از مقادیر در یک مجموعه پشتیبانی میکند. این به یک متد next
نیاز دارد و متدهای زیادی را ارائه میکند. بسیاری از انواع کتابخانه استاندارد Iterator
را پیادهسازی میکنند و شما نیز میتوانید آن را خودتان پیادهسازی کنید:
struct Fibonacci { curr: u32, next: u32, } impl Iterator for Fibonacci { type Item = u32; fn next(&mut self) -> Option<Self::Item> { let new_next = self.curr + self.next; self.curr = self.next; self.next = new_next; Some(self.curr) } } fn main() { let fib = Fibonacci { curr: 0, next: 1 }; for (i, n) in fib.enumerate().take(5) { println!("fib({i}): {n}"); } }
-
ویژگی
Iterator
بسیاری از عملیات برنامهنویسی تابعی رایج را روی collectionها پیادهسازی میکند (مانندmap
,filter
,reduce
,و غیره). این ویژگی است که در آن میتوانید تمام اسناد مربوط به آنها را پیدا کنید. در Rust، این توابع باید کد را به اندازه پیادهسازیهای ضروری معادل تولید کنند. -
IntoIterator
ویژگی است که باعث میشود حلقهها کار کنند. این مجموعه (collection) توسط تایپهای مجموعه مانندVec<T>
و ارجاعاتی به آنها مانند&Vec<T>
و&[T]
پیادهسازی میشود. Ranges نیز آن هارا اجرا میکند. به همین دلیل است که میتوانید روی یک بردار بابرای i در some_vec { .. }
تکرار کنید، اما درنهایتsome_vec.next()
وجود ندارد.