美文网首页
Function Currying

Function Currying

作者: RocWay | 来源:发表于2017-04-20 18:10 被阅读0次

    函数柯理化,很多人觉得很难理解。其实难就难在它的翻译并不恰当。如果翻译成

    部分绑定函数

    含义是不是一目了然?学过C++,用过 STL std::bind函数的同学应该对这个翻译感到很亲切:这不就是名义上只接受部分参数,但其实底下偷偷补足其他参数的做法吗?

    比如下面这个JS版的bind函数,它可以绑定函数的第一个参数(预先指定一个实参),从而生成一个新的函数:

    var bind = function(fn, a){
        return function(b){
            return fn(a, b)
        }
    }
    var mult = function(a, b){
        return a*b
    }
    
    // 绑定mult的第一个参数a,譬如指定该参数为2
    var time2 = bind(mult, 2)
    
    // 调用新函数time2
    time(1) // 得2
    time(3) // 得6
    

    当然,严谨一点来说,currying之后的函数只接受一个参数,这比一般的部分绑定函数形式上更加精炼。

    之所以这种函数处理方式叫做currying,是源自美国的数学家兼逻辑学家,Haskell Curry。虽然不是他发明的,但是却是这种方式的发扬者。
    最初由Gottlob Frege提出,经 Moses Schönfinkel发展,最终 Haskell Curry集其大成。

    相关文章

      网友评论

          本文标题:Function Currying

          本文链接:https://www.haomeiwen.com/subject/poelzttx.html