Generator 似乎没有公开 `resume()` 方法
Generator does not seem to expose `resume()` method
我正在看 generators in Rust,并决定试一试。我实现了我能找到的最基本的例子:
#![feature(generators, generator_trait)]
use std::ops::Generator;
fn main() {
let mut generator = || {
println!("2");
yield;
println!("4");
};
println!("1");
generator.resume();
println!("3");
generator.resume();
println!("5");
}
但是,当我尝试编译时出现此错误:
error[E0599]: no method named `resume` found for type `[generator@src/main.rs:6:25: 10:6 _]` in the current scope
--> src/main.rs:13:15
|
13 | generator.resume();
| ^^^^^^
我是不是做错了什么,或者 resume()
方法实际上在生成器上并不存在?如果是这样,我怎样才能唤醒发电机?我能找到的文档都指向 resume()
方法,所以我现在很困惑。
注意:是的,我知道这是该语言的一个不稳定特性,但在文档中它确实鼓励用户尝试使用它,所以我假设应该至少部分实施?
我现在的环境:rustc 1.35.0-nightly (acd8dd6a5 2019-04-05)
Yes, I am aware that this is an unstable feature
不稳定的功能往往会随着时间的推移而改变,情况就是如此。随着最近 Pin
的稳定 resume
has been changed (PR #55704)
的签名
fn resume(self: Pin<&mut Self>) -> GeneratorState<Self::Yield, Self::Return>;
还好例子也有been adopted.
因此您的代码需要如下所示:
#![feature(generators, generator_trait)]
use std::ops::Generator;
use std::pin::Pin;
fn main() {
let mut generator = || {
println!("2");
yield;
println!("4");
};
let mut pin = Pin::new(&mut generator);
println!("1");
pin.as_mut().resume();
println!("3");
pin.as_mut().resume();
println!("5");
}
这样做的好处是,这种方法不再需要 unsafe
(您的代码丢失了,因此不应该在较旧的 nightly 上编译),这就是为什么 Pin
[=已为生成器选择 30=]。
经验教训:如果您使用夜间编译器,也请使用 nightly doc。
我正在看 generators in Rust,并决定试一试。我实现了我能找到的最基本的例子:
#![feature(generators, generator_trait)]
use std::ops::Generator;
fn main() {
let mut generator = || {
println!("2");
yield;
println!("4");
};
println!("1");
generator.resume();
println!("3");
generator.resume();
println!("5");
}
但是,当我尝试编译时出现此错误:
error[E0599]: no method named `resume` found for type `[generator@src/main.rs:6:25: 10:6 _]` in the current scope
--> src/main.rs:13:15
|
13 | generator.resume();
| ^^^^^^
我是不是做错了什么,或者 resume()
方法实际上在生成器上并不存在?如果是这样,我怎样才能唤醒发电机?我能找到的文档都指向 resume()
方法,所以我现在很困惑。
注意:是的,我知道这是该语言的一个不稳定特性,但在文档中它确实鼓励用户尝试使用它,所以我假设应该至少部分实施?
我现在的环境:rustc 1.35.0-nightly (acd8dd6a5 2019-04-05)
Yes, I am aware that this is an unstable feature
不稳定的功能往往会随着时间的推移而改变,情况就是如此。随着最近 Pin
的稳定 resume
has been changed (PR #55704)
fn resume(self: Pin<&mut Self>) -> GeneratorState<Self::Yield, Self::Return>;
还好例子也有been adopted.
因此您的代码需要如下所示:
#![feature(generators, generator_trait)]
use std::ops::Generator;
use std::pin::Pin;
fn main() {
let mut generator = || {
println!("2");
yield;
println!("4");
};
let mut pin = Pin::new(&mut generator);
println!("1");
pin.as_mut().resume();
println!("3");
pin.as_mut().resume();
println!("5");
}
这样做的好处是,这种方法不再需要 unsafe
(您的代码丢失了,因此不应该在较旧的 nightly 上编译),这就是为什么 Pin
[=已为生成器选择 30=]。
经验教训:如果您使用夜间编译器,也请使用 nightly doc。