我有點試驗_.bind(...)
。我看到如何強制綁定一個函數上下文,但還沒有看到如何做currying。如何使用UnderscoreJS進行柯里化?
我嘗試是這樣的:
add = function(number) { this.sum = this.sum + number; }
add5 = _.bind(add, { sum: 0 }, 5)
但是,調用add5()
或add5(5)
似乎別有一番效果。
任何線索如何包裝參數,以便上下文從一個調用保存到另一個?
我有點試驗_.bind(...)
。我看到如何強制綁定一個函數上下文,但還沒有看到如何做currying。如何使用UnderscoreJS進行柯里化?
我嘗試是這樣的:
add = function(number) { this.sum = this.sum + number; }
add5 = _.bind(add, { sum: 0 }, 5)
但是,調用add5()
或add5(5)
似乎別有一番效果。
任何線索如何包裝參數,以便上下文從一個調用保存到另一個?
也許你想要做部分申請,不是咖喱/schönfinkeling。下劃線有這個_.partial
功能:
function add(a, b) { return a+b; }
var add5 = _.partial(add, 5);
您可以如用_.bind
,它有有一定的影響。例如:
var add5 = _.bind(add, null /*context is irrelevant*/, 5);
add5(3); // returns 8
但是,您的函數沒有返回任何內容,並且您更改的上下文無法訪問。但是:
var ctx1 = {sum: 0};
function add(a) { this.sum += a; } // returns nothing!
var addto1 = _.bind(add, ctx1);
addto1(5); // undefined
ctx1; // {sum: 5}
var add5to1 = _.bind(add, ctx1, 5);
add5to1(); // undefined
ctx1; // {sum: 10}
var ctx2 = {sum: 5};
add3to2 = _.bind(add, ctx2, 3);
add3to2(); // undefined
ctx2; // {sum: 8}
下劃線有一個'_.partial',我覺得你可以用來咖喱。 – 2013-05-13 11:53:34
'add'和'add5' *都沒有*效果,所以你期望發生什麼? – 2013-05-13 11:59:38
我期待得到一些數字:0,5,10,15,... – poseid 2013-05-13 12:00:28