草庐IT

JavaScript curry : what are the practical applications?

coder 2023-05-01 原文

我想我还没学会 curry 。我明白它的作用,以及如何去做。我只是想不出我会使用它的情况。

您在哪里使用 JavaScript 中的柯里化(Currying)(或者主要库在哪里使用它)?欢迎使用 DOM 操作或一般应用程序开发示例。

One of the answers提到动画。 slideUpfadeIn 等函数将元素作为参数,通常是一个柯里化(Currying)函数,返回内置默认“动画函数”的高阶函数。为什么这比仅仅应用带有一些默认值的更高层函数更好?

使用它有什么缺点吗?

这里有一些关于 JavaScript currying 的好资源:

我会在评论中出现时添加更多内容。


因此,根据答案,柯里化(Currying)和部分应用通常是便利技术。

如果您经常通过使用相同配置调用高级函数来“优化”高级函数,则可以对高级函数进行 curry(或使用 Resig 的部分)来创建简单、简洁的辅助方法。

最佳答案

这是 interesting AND practical use of currying in JavaScript that uses closures :

function converter(toUnit, factor, offset, input) {
    offset = offset || 0;
    return [((offset + input) * factor).toFixed(2), toUnit].join(" ");
}

var milesToKm = converter.curry('km', 1.60936, undefined);
var poundsToKg = converter.curry('kg', 0.45460, undefined);
var farenheitToCelsius = converter.curry('degrees C', 0.5556, -32);

milesToKm(10);            // returns "16.09 km"
poundsToKg(2.5);          // returns "1.14 kg"
farenheitToCelsius(98);   // returns "36.67 degrees C"

这依赖于 Functioncurry 扩展,尽管您可以看到它只使用 apply(没什么花哨的):

Function.prototype.curry = function() {
    if (arguments.length < 1) {
        return this; //nothing to curry with - return function
    }
    var __method = this;
    var args = toArray(arguments);
    return function() {
        return __method.apply(this, args.concat([].slice.apply(null, arguments)));
    }
}

关于JavaScript curry : what are the practical applications?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/113780/

有关JavaScript curry : what are the practical applications?的更多相关文章

随机推荐