• BB_C@programming.dev
    link
    fedilink
    arrow-up
    5
    ·
    2 days ago

    In case the wording tripped anyone, generators (blocks and functions) have been available for a while as an unstable feature.

    This works (playground):

    #![feature(gen_blocks)]
    
    gen fn gfn() -> i32 {
        for i in 1..=10 {
            yield i;
        }
    }
    
    fn gblock() -> impl Iterator<Item = i32> {
        gen {
            for i in 1..=10 {
                yield i;
            }
        }
    }
    
    fn main() {
        for i in gfn() {
            println!("{i} from gfn()");
        }
        for i in gblock() {
            println!("{i} from gblock()");
        }
    }
    

    Note that the block-in-fn version works better at this moment (from a developer’s PoV) because rust-analyzer currently treats gfn() as an i32 value. But the block-in-fn pattern works perfectly already.