zoukankan      html  css  js  c++  java
  • [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(),
    );
  • 相关阅读:
    Navicat 总是断开连接
    MySQL 重连机制
    优化 一
    python之 paramiko模块 连接服务器
    变量值的修改
    Python使用APScheduler实现定时任务
    Linux命令 清空文件
    输入法 | 输入法如何打出直角引号
    Java | Java字节码
    英语 | 图片学习单词
  • 原文地址:https://www.cnblogs.com/Answer1215/p/8306326.html
Copyright © 2011-2022 走看看