8

Underscore.JS ソース ( https://github.com/jashkenas/underscore/blob/master/underscore.js ) によると:

// Start chaining a wrapped Underscore object.
chain: function() {
  this._chain = true;
  return this;
},

// Extracts the result from a wrapped and chained object.
value: function() {
  return this._wrapped;
}

chain() および value() 関数は、Underscore オブジェクトの単純なラッパーです。

したがって、次の構造を使用している場合:

_.chain(someCollection)
.map(function1)   
.map(function2)
.map(function3)
.value()

Underscore は 2 つの中間コレクションを作成し、3 つの列挙を実行します。

LINQ がそのメソッドを実装するように、chain() および value() メソッドが遅延評価として実装されないのはなぜですか? たとえば、このチェーンは次のように扱うことができます。

_.chain(someCollection)
.map(function(x){
    return function3(function2(function1(x)));
})
.value();

この種の実装に JS 関連の問題はありますか?

4

2 に答える 2

7

Lazy.jsのようなものを探していると思います:

Lazy.js は JavaScript 用のユーティリティ ライブラリで、Underscore や Lo-Dash に似ていますが、重要な違いが 1 つあります。遅延評価 (遅延実行とも呼ばれます) です。これは、多くの場合、特に大きな配列を処理したり、複数のメソッドを「連鎖」させたりする場合に、優れたパフォーマンスに変換できます。小さな配列での単純なケース ( mapfilterなど) の場合、Lazy のパフォーマンスは Underscore や Lo-Dash に似ているはずです。

編集: Lo-Dashが遅延評価を行う機能も追加しているように見えます.

于 2013-08-09T04:52:52.177 に答える