我正在使用Underscore.js和Underscore-contrib处理财务分析工具。
我经常重复低级算术原语。例如,数组的简单求和:
码a.js:
arr_a = [20, 15, 7];
arr_b = [19, 19, 19];
_.reduce(arr_a, function(memo, x) { return memo + x; }, 0);
# => 42
_.reduce(arr_b, function(memo, x) { return memo + x; }, 0);
# => 57
我考虑过创建一个命名函数来消除迭代定义的重复:
码b.js:
function sum(memo, x) {
return memo + x;
}
arr_a = [20, 15, 7];
arr_b = [19, 19, 19];
_.reduce(arr_a, sum, 0);
# => 42
_.reduce(arr_b, sum, 0);
# => 57
然后继续将reduce
调用包裹起来进一步干掉这个:
码c.js:
function sum(memo, x) {
return memo + x;
}
function accumulate(vector) {
_.reduce(vector, sum, 0);
}
arr_a = [20, 15, 7];
arr_b = [19, 19, 19];
accumulate(arr_a);
# => 42
accumulate(arr_b);
# => 57
对我来说,这闻起来像是mixin:
LIB-a.js:
_.mixin({
accumulate: function (vector) {
_.reduce(vector, function(memo, x) {
return memo + x;
}, 0);
}
});
码d.js:
arr_a = [20, 15, 7];
arr_b = [19, 19, 19];
_.accumulate(arr_a);
# => 42
_.accumulate(arr_b);
# => 57
使用mixin可以很好地完成工作。我的问题是:是否有任何其他模式(特定于Underscore.js)在不使用mixins的情况下重复使用iterate?我不会在使用mixin时出现问题#39; s"""" [only]模式,我只是问是否有其他策略来解决回调重用问题。
例如, code-b.js 演示了一种可能的替代方法 - 只需将iteratee创建为命名函数(可能从模块中导出以避免需要匈牙利式的命名约定)。 / p>
答案 0 :(得分:0)
经过大量的搜索,并阅读上述评论,和缺乏回复,我很清楚答案是"没有。"