2 个版本 (1 个稳定版)
1.0.0 | 2020 年 11 月 28 日 |
---|---|
0.1.0 | 2020 年 11 月 28 日 |
#1405 在 Rust 模式
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());