可以克隆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();
| ^^^^^
据我所知,闭包是可以克隆的;生成器有什么问题?
我发现的唯一解决办法是从某个函数返回生成器(然后它每次都是新的),但这在语法上对我来说很不方便。
发布于 2019-06-20 08:39:28
不,它是not possible to clone a generator。
当前的解决方法是在每次需要重置生成器时构造一个新的生成器。
std::ops::Generator
类型的变量
这些不是该类型的变量,就像|| foo()
不是Fn()
类型的变量一样。Generator
是一种特征,dyn Generator
是一种类型。您的gen
变量是实现特征Generator
的匿名类型。
另请参阅:
https://stackoverflow.com/questions/56676309
复制相似问题