当前位置:  开发笔记 > 编程语言 > 正文

"部分功能应用程序"在Javascript环境中是用词不当吗?

如何解决《"部分功能应用程序"在Javascript环境中是用词不当吗?》经验,为你挑选了0个好方法。

我的一个朋友和我正在讨论Javascript中的currying和部分函数应用,我们得出了非常不同的结论,无论是否可以实现.我想出了这个实现Function.prototype.curry,这是我们讨论的基础:

Function.prototype.curry = function() {
    if (!arguments.length) return this;

    var args = Array.prototype.slice.apply(arguments);
    var mmm_curry = this, args;

    return function() {
        var inner_args = Array.prototype.slice.apply(arguments);
        return mmm_curry.apply(this, args.concat(inner_args));
    }

}

使用如下:

var vindaloo = function(a, b) {
    return (a + b);
}

var karahi = vindaloo.curry(1);
var masala = karahi(2);
var gulai = karahi(3);

print(masala);
print(other);

其输出如下Spidermonkey:

$ js curry.js
3
4

他的观点是,由于Javascript function原语本身不支持"部分函数应用程序",因此karahi将部分应用的绑定到变量的函数引用是完全错误的.他的论点是,当vindaloo函数被curry时,函数本身被完全应用并返回一个闭包,而不是"部分应用的函数".

现在,我的观点是,虽然Javascript本身不支持部分应用程序在其function原语(不像ML或Haskell),但这并不意味着你不能创建一个能够的语言的更高阶函数封装部分应用函数的概念.此外,尽管被"应用",函数的范围仍然绑定到它返回的闭包,导致它保持"部分应用".

哪个是对的?

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有