pub trait Generator<R = ()> {
type Yield;
type Return;
// Required method
fn resume(
self: Pin<&mut Self>,
arg: R
) -> GeneratorState<Self::Yield, Self::Return>;
}
🔬This is a nightly-only experimental API. (
generator_trait
#43122)Expand description
由内置生成器类型实现的 trait。
生成器,通常也称为协程,目前是 Rust 中的一个实验性语言特性。 RFC 2033 中添加的生成器目前主要用于为 async/await 语法提供构建块,但可能会扩展为还为迭代器和其他原语提供符合人体工程学的定义。
生成器的语法和语义不稳定,将需要进一步的 RFC 来稳定。但是,此时的语法类似于闭包:
#![feature(generators, generator_trait)]
use std::ops::{Generator, GeneratorState};
use std::pin::Pin;
fn main() {
let mut generator = || {
yield 1;
"foo"
};
match Pin::new(&mut generator).resume(()) {
GeneratorState::Yielded(1) => {}
_ => panic!("unexpected return from resume"),
}
match Pin::new(&mut generator).resume(()) {
GeneratorState::Complete("foo") => {}
_ => panic!("unexpected return from resume"),
}
}
Run更多关于生成器的文档可以在 未稳定的书 中找到。
Required Associated Types§
Required Methods§
sourcefn resume(
self: Pin<&mut Self>,
arg: R
) -> GeneratorState<Self::Yield, Self::Return>
fn resume( self: Pin<&mut Self>, arg: R ) -> GeneratorState<Self::Yield, Self::Return>
🔬This is a nightly-only experimental API. (
generator_trait
#43122)恢复此生成器的执行。
此函数将恢复生成器的执行,如果尚未生成,则开始执行。
该调用将返回到生成器的最后一个暂停点,从最新的 yield
恢复执行。
生成器将继续执行,直到它产生或返回,此时该函数将返回。
返回值
从此函数返回的 GeneratorState
枚举指示生成器在返回时处于什么状态。
如果返回了 Yielded
变体,则生成器已达到暂停点,并且已产生一个值。
此状态下的生成器可在稍后恢复。
如果返回 Complete
,则生成器将完全完成所提供的值。再次恢复生成器是无效的。
Panics
如果先前已返回 Complete
变体后调用此函数,就可能会出现 panic。
尽管在 Complete
之后恢复时,将语言中的生成器字面量保证为 panic,但对于 Generator
trait 的所有实现均不能保证。