首页 > 解决方案 > 是否可以像普通函数一样组合生成器函数

问题描述

问题:是否可以像您那样将两个生成器组合成一个生成器compose

function* type(vals) {
  for(const v of vals) {
    yield v;
  }
}

const bool = type([true, false]);
const str = type([
  '',
  undefined,
  'Lorem',
  'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
  ''
]);

const composeGenerator = () => {/*???*/};  
const input = composeGenerator(bool,str);
console.log(input, 'yes');

for (const i of bool) {
  console.log(i); // true, false
}

for (const i of str) {
  console.log(i); // '',  undefined,  'Lorem',  'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',  ''
}

for (const i of input) {
  console.log(i); // '',  undefined,  'Lorem',  'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',  '', true, false
}

标签: javascriptecmascript-6generatoriterable

解决方案


首先,您的type功能实际上可以缩短。composeGenerator其次,这是您从左到右的一种可能实现:

function * type (iterable) {
  yield * iterable;
}

const bool = type([true, false]);
const str = type([
  '',
  undefined,
  'Lorem',
  'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
  ''
]);

function * composeGenerator (...iterables) {
  for (const iterable of iterables) yield * iterable;
}

const input = composeGenerator(str, bool);

for (const i of input) {
  console.log(i);
}


推荐阅读