当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。