< 返回版块

c5soft 发表于 2019-11-15 09:29

Tags:coroutine,yield

范长春写的《深入浅出Rust》应该是目前能看到的用中文书写的Rust教程中的高端作品。看他的公众号,有一段有关协程Coroutine的文章,其中yield代码无法运行,查资料,改了一下,在当前Nightly版本编译通过。

#![feature(generators, generator_trait)]
use std::ops::{Generator, GeneratorState};
use std::pin::Pin;

fn main() {
    let mut generator = || {
        let mut curr : u64 = 1;
        let mut next : u64 = 1;
        loop {
            let new_next = curr.checked_add(next);
            if let Some(new_next) = new_next {
                curr = next;
                next = new_next;
                yield curr; // <-- 新的关键字
            } else {
                return;
            }
        }
    };
    let mut generator =Pin::new(&mut generator);
    loop {
        match generator.as_mut().resume() {
            GeneratorState::Yielded(v) => println!("{}", v),
            GeneratorState::Complete(_) => return,
        }
    }
}

Ext Link: https://mp.weixin.qq.com/s/eKQ-e92yx9hxOLu9q1KzeA

评论区

写评论

还没有评论

1 共 0 条评论, 1 页