6个版本
使用旧版Rust 2015
0.3.0 | 2023年1月3日 |
---|---|
0.2.1 | 2022年2月7日 |
0.2.0 | 2020年4月30日 |
0.1.2 | 2017年8月30日 |
#34 in #temporary
352 每月下载
用于 3 crates
10KB
182 代码行(不含注释)
gen_iter - 使用生成器创建迭代器。
有关示例和用法,请参阅文档。
许可证
双许可 MIT / apache-2.0
lib.rs
:
gen_iter - 创建生成器作为迭代器使用
GenIter
和 gen_iter!
GenIter
将一个 Generator<()>
转换为一个迭代器,该迭代器遍历生成器产生的类型。生成器的返回类型需要为 ()
。
#![feature(generators)]
use gen_iter::gen_iter;
fn fibonacci() -> impl Iterator<Item = u64> {
gen_iter!({
let mut a = 0;
let mut b = 1;
loop {
let c = a + b;
a = b;
b = c;
yield a;
}
})
}
for elem in fibonacci().map(|x| 2 * x).take(10) {
println!("{}", elem);
}
GenIterReturn
和 gen_iter_return!
GenIterReturn
可以从 Generator<()>
转换,&mut GenIterReturn<G>
可以用作迭代器。在迭代器耗尽后可以获取生成器的返回值。
gen_iter_return!
帮助创建 GenIterReturn
#![feature(generators)]
use gen_iter::gen_iter_return;
let mut g = gen_iter_return!({
yield 1;
yield 2;
return "done";
});
for y in &mut g {
println!("yield {}", y);
}
println!("generator is_done={}", g.is_done()); // true
println!("generator returns {}", g.return_or_self().ok().unwrap()); // "done"