• Bogasse@lemmy.ml
    link
    fedilink
    arrow-up
    7
    ·
    2 days ago

    The gen keyword is too much teasing, I know it’s not round the corner but I’m gonna explode 🥺

    • 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.