ただのブログです

技術的な物とかを主に。主にWeb系がメイン。いつか、職業エンジニアになりたい。

coffee scriptでrange([z...y])を使う際の注意

jsのコードをcoffeeで書き直してた際に見つけた。

やる前からだいたいわかってたんだけどjavascriptに無限リストはないので

Array::zip = (arr) ->
  base = if (this.length < arr.length) then this else arr
  [0...base.length].map((i) ->
    [this[i], arr[i]]
  , this)

と、書くと

Array.prototype.zip = function(arr) {
  var base, _i, _ref, _results;
  base = this.length < arr.length ? this : arr;
  return (function() {
    _results = [];
    for (var _i = 0, _ref = base.length; 0 <= _ref ? _i < _ref : _i > _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }
    return _results;
  }).apply(this).map(function(i) {
    return [this[i], arr[i]];
  }, this);
};

と変換されて、きっと巨大な配列だと爆死する