• [Transducer] Lazyness in Transduer


    Transducers remove the requirement of being lazy to optimize for things like take(10). However, it can still be useful to "bind" a collection to a set of transformations and pass it around, without actually evaluating the transformations.

    As noted above, whenever you apply transformations to an iterator it does so lazily. It's easy convert array transformations into a lazy operation, just use the utility function iterator to grab an iterator of the array instead.

    The whole point here is using 'iterator' from transducer.js lib. So you get control when you need the data.

    import t from 'transducers.js';
    
    const doubleTheNumber = number => number * 2;
    export const evenOnly = number => number % 2 === 0;
    
    const doubleAndEven = t.compose(
      t.filter(evenOnly),
      t.map(doubleTheNumber),
    );
    
    const arr = [1,2,3,4,5,6,7,8,9,10];
    const res = t.seq(
      t.iterator(arr),
      t.compose(doubleAndEven, t.take(2)),
    );
    
    function* makeNumbers() {
      let num = 1;
      while (true) yield num++;
    }
    
    const lazyNums = t.seq(makeNumbers(), doubleAndEven);
    
    console.log(
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
      lazyNums.next(),
    );
  • 相关阅读:
    WordCount结对项目
    第一周作业:一些感想
    第一次作业
    Spring Cloud 微服务实战笔记
    解决jest处理es模块
    领域驱动设计(DDD:Domain-Driven Design)
    测试
    whistle
    日记(2018-11-07)
    ubuntu中使用机密数据Secrets
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8306326.html
Copyright © 2020-2023  润新知