當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust repeat_with用法及代碼示例


本文簡要介紹rust語言中 Function std::iter::repeat_with 的用法。

用法

pub fn repeat_with<A, F>(repeater: F) -> RepeatWith<F> where    F: FnMut() -> A,

創建一個新的迭代器,通過應用提供的閉包,重複器 F: FnMut() -> A 來無限地重複類型為 A 的元素。

repeat_with() 函數一遍又一遍地調用中繼器。

repeat_with() 這樣的無限迭代器經常與像 Iterator::take() 這樣的適配器一起使用,以使它們成為有限的。

如果您需要的迭代器的元素類型實現了 Clone ,並且可以將源元素保留在內存中,那麽您應該改用 repeat() 函數。

repeat_with() 生成的迭代器不是 DoubleEndedIterator 。如果您需要 repeat_with() 返回 DoubleEndedIterator ,請打開 GitHub 問題來解釋您的用例。

例子

基本用法:

use std::iter;

// let's assume we have some value of a type that is not `Clone`
// or which don't want to have in memory just yet because it is expensive:
#[derive(PartialEq, Debug)]
struct Expensive;

// a particular value forever:
let mut things = iter::repeat_with(|| Expensive);

assert_eq!(Some(Expensive), things.next());
assert_eq!(Some(Expensive), things.next());
assert_eq!(Some(Expensive), things.next());
assert_eq!(Some(Expensive), things.next());
assert_eq!(Some(Expensive), things.next());

使用變異和有限:

use std::iter;

// From the zeroth to the third power of two:
let mut curr = 1;
let mut pow2 = iter::repeat_with(|| { let tmp = curr; curr *= 2; tmp })
                    .take(4);

assert_eq!(Some(1), pow2.next());
assert_eq!(Some(2), pow2.next());
assert_eq!(Some(4), pow2.next());
assert_eq!(Some(8), pow2.next());

// ... and now we're done
assert_eq!(None, pow2.next());

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Function std::iter::repeat_with。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。