1 个不稳定发布
0.1.0 | 2023 年 7 月 17 日 |
---|
#1343 in 游戏开发
23KB
451 行
德登内
可爱的小生成器!
德登内实现了生成器,类似于 不稳定语言特性,完全在稳定的 Rust 中通过 async/await 实现。
简单用法
use dedenne::*;
let mut generator = Generator::new(|y, init| async move {
for x in 0..init {
y.ield(x).await;
}
for x in (0..init).rev() {
y.ield(x).await;
}
"All done!"
});
assert_eq!(
generator.start(3), GeneratorResponse::Yielding(0)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(1)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(2)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(2)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(1)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(0)
);
assert_eq!(
generator.resume(), GeneratorResponse::Done("All done!")
);
对于更大的示例,请查看这个简单的 TUI 界面 。
panic!
vs unreachable!
如果德登内中某处 panic!
,那么这是一个用户错误。请确保您已经 await
了您的 y.yield
,并且在生成器耗尽后不要调用 resume
。
如果德登内中某处使用 unreachable!
消息引发恐慌,那么 这是一个德登内的问题。如果确实如此,请提交一个错误报告。
已有技术
我不是第一个有这个想法的人。然而,我认为德登内是唯一一个支持映射迭代器的库。
generator
。不支持起始参数,这意味着您不能将其用作映射迭代器。总是堆栈性的。genawaiter
。有一些便利的宏,使生成器更容易使用。还允许您真正调整生成器的存储方式(堆栈性或分配性)。- 不稳定语言特性。据我所知,不支持传递值到生成器中。也要求使用 nightly Rust,并且自写作时起已经讨论了 6 年。
依赖关系
~1.5MB
~35K SLoC