Trait std::ops::Generator[][src]

pub trait Generator<R = ()> {
    type Yield;
    type Return;
    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;
        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

🔬 This is a nightly-only experimental API. (generator_trait #43122)

此生成器产生的值的类型。

此关联类型对应于 yield 表达式以及每次生成器产生时都允许返回的值。

例如,作为一个迭代器的迭代器可能将这种类型作为 T 进行迭代。

🔬 This is a nightly-only experimental API. (generator_trait #43122)

此生成器返回的值的类型。

这对应于使用 return 语句从生成器返回的类型,或隐式作为生成器字面量的最后一个表达式返回的类型。 例如,futures 将其用作 Result<T, E>,因为它代表完整的 future。

Required methods

🔬 This is a nightly-only experimental API. (generator_trait #43122)

恢复此生成器的执行。

此函数将恢复生成器的执行,如果尚未生成,则开始执行。 该调用将返回到生成器的最后一个暂停点,从最新的 yield 恢复执行。 生成器将继续执行,直到它屈服或返回为止,此时该函数将返回。

返回值

从此函数返回的 GeneratorState 枚举指示生成器在返回时处于什么状态。 如果返回了 Yielded 成员,则生成器已达到暂停点,并且已产生一个值。 此状态下的生成器可在稍后恢复。

如果返回 Complete,则生成器将完全完成所提供的值。再次恢复生成器是无效的。

Panics

如果先前已返回 Complete 成员后调用此函数,则它可能为 panic。 尽管在 Complete 之后恢复时,将语言中的生成器字面量保证为 panic,但对于 Generator trait 的所有实现均不能保证。

Implementors

🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)
🔬 This is a nightly-only experimental API. (generator_trait #43122)