常用 Underscore.js 迭代器的模式
Pattern for commonly used Underscore.js iteratees
我正在使用 Underscore.js and 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
调用进行进一步的 DRY:
代码-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 可以很好地完成工作。我的问题是:是否有任何 other 模式(特定于 Underscore.js)用于在不使用 mixin 的情况下重用迭代器? 我没有如果那是“唯一的”模式,那么使用 mixin 的问题,我只是想问一下是否有任何其他策略可以解决回调重用的问题。
例如,code-b.js 演示了一种可能的替代方案——简单地将迭代器创建为命名函数(可能从模块导出以避免需要匈牙利语-esque 命名约定)。
经过大量搜索并阅读以上评论后,和 缺乏回复,我很清楚答案是 "no."
我正在使用 Underscore.js and 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
调用进行进一步的 DRY:
代码-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 可以很好地完成工作。我的问题是:是否有任何 other 模式(特定于 Underscore.js)用于在不使用 mixin 的情况下重用迭代器? 我没有如果那是“唯一的”模式,那么使用 mixin 的问题,我只是想问一下是否有任何其他策略可以解决回调重用的问题。
例如,code-b.js 演示了一种可能的替代方案——简单地将迭代器创建为命名函数(可能从模块导出以避免需要匈牙利语-esque 命名约定)。
经过大量搜索并阅读以上评论后,和 缺乏回复,我很清楚答案是 "no."