Trait core::ops::Generator [−][src]
pub trait Generator<R = ()> {
type Yield;
type Return;
fn resume(
self: Pin<&mut Self>,
arg: R
) -> GeneratorState<Self::Yield, Self::Return>;
}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;
return "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在不稳定的书中可以找到有关生成器的更多文档。
Associated Types
此生成器产生的值的类型。
此关联类型对应于 yield 表达式以及每次生成器产生时都允许返回的值。
例如,作为一个迭代器的迭代器可能将这种类型作为 T 进行迭代。
Required methods
恢复此生成器的执行。
此函数将恢复生成器的执行,如果尚未生成,则开始执行。
该调用将返回到生成器的最后一个暂停点,从最新的 yield 恢复执行。
生成器将继续执行,直到它产生或返回,此时该函数将返回。
返回值
从此函数返回的 GeneratorState 枚举指示生成器在返回时处于什么状态。
如果返回了 Yielded 变体,则生成器已达到暂停点,并且已产生一个值。
此状态下的生成器可在稍后恢复。
如果返回 Complete,则生成器将完全完成所提供的值。再次恢复生成器是无效的。
Panics
如果先前已返回 Complete 变体后调用此函数,就可能会出现 panic。
尽管在 Complete 之后恢复时,将语言中的生成器字面量保证为 panic,但对于 Generator trait 的所有实现均不能保证。