Cycle Generator
なるものを書いてみた。 Lazy.js を使って。
var _ = require('lazy.js'); var logger = function(x){console.log(x);}; var cycleGenerator = function(args){ var _args = args || [1,2,3,4,5], _size = _args.length; return _.generate(function(i){ return _args[i % _size]; }); }; cycleGenerator([1,2,3]).take(10).each(logger); // -> 1,2,3,1,2,3,1,2,3,1
Generate 系はアイデア次第で色々作れるから面白い。
追記
純粋な JavaScript バージョン
var cycleGenerator = (function(args){ var _args = args || [1,2,3,4,5], _size = _args.length; return (function*(){ var i=0; while(true){ yield _args[i % _size]; i++; } }()); }()); logger(cycleGenerator.next().value); logger(cycleGenerator.next().value);