#迭代器 #重复 #无限 #参数 #数字 # #应用

iter_from_fn

从无参数函数的重复应用中创建迭代器

2 个版本 (1 个稳定版)

1.0.0 2020 年 11 月 28 日
0.1.0 2020 年 11 月 28 日

#1405Rust 模式

MIT 许可证

4KB

从函数创建迭代器

正如其名。你有一个函数,你想创建一个无限可迭代的对象,该对象会重复调用该函数?这个包就是为你准备的

用法

如果你有一个函数,只需将其传递给包中的 from 函数。你可以使用 take 来获取指定数量的元素。

extern crate iter_from_fn;

fn generate_one() -> u64 {
   1
}

assert_eq!(
   vec![1; 10],
   iter_from_fn::rom(generate_one).take(10).collect::<Vec<_>>()
);

let mut x = 0;
let closure = || { x += 1; x }
assert_eq!(
   vec![1,2,3,4,5],
   iter_from_fn::from(closure).take(5).collect::<Vec<_>>()
);

你还可以将其用于 for 循环并 break

extern crate iter_from_fn;

let mut x = 1;
let closure = || {
  let temp = x;

  //x = (x + 1)^2 each iteration
  x += 1;
  x *= x;

  temp
};

let mut v = Vec::new();
for x in iter_from_fn::from(closure) {
  if x >= 10 { break }

  v.push(x);
}

assert_eq!(vec![1, 4], v);

如果你需要将值绑定到参数,请使用闭包。

   extern crate iter_from_fn;

   let vec_100_capacity = || Vec::with_capacity(100);
   let mut it = iter_from_fn::from(vec_100_capacity);

   assert_eq!(100, it.next().capacity());

无运行时依赖