【发布时间】:2016-05-12 17:50:26
【问题描述】:
如何通过避免在 JavaScript 中像这样重复创建函数来编写这个 sn-p 更多功能?只是为了给出一个上下文,我试图找出从当前值到最终值的移动是否已经实现。deltaValue 如果移动朝向更高的值,则为正,如果移动朝向更低的值,则为负。
if (deltaValue > 0) {
maxPossibleValue = function(current, final) {
return current > final ? final : current;
}
} else {
maxPossibleValue = function(current, final) {
return current < final ? final : current;
}
}
假设在 JavaScript 中存在 < 和 > 作为函数,lt 和 gt,我可以只用一个函数来评估它,其中 predicate 是 lt 和 gt 处理高阶函数。但是JS原生没有这样的功能,那么上面的方法是唯一的方法吗?
maxPossibleValue = function(predicate) {
return function(c, f) {
return predicate(c, f) ? c : f }
}
这可以被认为只是模板化所需的谓词函数并返回一个新函数。我在 Scheme 中见过这样的模式。
【问题讨论】:
-
您是否正在尝试做这样的事情? maxPosibleValue(function(c,f) { return c > f; })(c,f);
-
这是否达到了目标?虽然巧妙地我可以使用逻辑来翻转变量并实现我想要的。
-
我写的内联函数是您似乎需要的方法之一(当 deltaValue 大于 0 时)。显然你可以每次改变函数的逻辑来得到你想要的行为。
-
记住我不想重复函数:)
-
然后将每个函数存储在变量中(如
maxPossibleValue)并尽可能地通用(如在内部函数中):)
标签: javascript functional-programming