是否可以克隆 std::ops::Generator
类型的变量?有一个生成器,我想创建一个新实例,具有干净的堆栈,没有 clone()
方法。我在 Box
和 Pin
内部尝试过,但它没有克隆!
#![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
是一个trait,dyn Generator
是一个类型。您的 gen
变量是实现特征 Generator
的匿名类型。
另请参阅:
关于rust - 如何克隆生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56676309/