rust - 如何克隆生成器?

标签 rust generator

是否可以克隆 std::ops::Generator 类型的变量?有一个生成器,我想创建一个新实例,具有干净的堆栈,没有 clone() 方法。我在 BoxPin 内部尝试过,但它没有克隆!

#![feature(generators, generator_trait)]

fn main() {
    let gen = move || yield ();

    let gen1 = gen.clone();

    let gen = Box::new(move || yield ());
    let gen1 = gen.clone();

    let gen = Box::pin(move || yield ());
    let gen1 = gen.clone();
}
error[E0599]: no method named `clone` found for type `[generator@src/main.rs:4:15: 4:31 _]` in the current scope
 --> src/main.rs:6:20
  |
6 |     let gen1 = gen.clone();
  |                    ^^^^^

据我了解,闭包是可以克隆的;发电机出了什么问题?

我发现的唯一解决方法是从某个函数返回生成器(然后每次都会是新的),但这在语法上对我来说很不方便。

最佳答案

不,是not possible to clone a generator .

当前的解决方法是在每次需要重置生成器时构建一个新的生成器。

a variable of type std::ops::Generator

这些不是该类型的变量,就像 || 一样。 foo()Fn() 类型的变量。 Generator 是一个traitdyn Generator 是一个类型。您的 gen 变量是实现特征 Generator 的匿名类型。

另请参阅:

关于rust - 如何克隆生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676309/

相关文章:

python - 有什么理由使用 Python 的基于生成器的协程而不是 async/await 吗?

postgresql - 如何使用 Diesel 更新现有对象? "` T : Identifiable` is not satisfied"

generics - 为 int 寻找特征 core::cmp::PartialEq 的实现

rust - 用 Rust 解析二进制协议(protocol)的最佳方法是什么

python - 嵌套生成器到嵌套列表

python - 一周中几天的 Python 无限生成器

rust - Rust 中的类子类型化

rust - 无法使用f32.rs函数,链接器错误

c# - 迭代器和枚举器的区别

typescript - 如何让 TypeScript 自动推断 `yield` 调用结果的类型?