美文网首页
函数柯里化与偏函数

函数柯里化与偏函数

作者: 明明你也一样 | 来源:发表于2021-03-09 11:48 被阅读0次

什么是函数柯里化(Currying)

维基百科:

在计算机科学中,柯里化(英語:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

简单理解就是把一个有n个参数的函数转换成n个嵌套的函数,每个函数只接受一个参数,并返回一个新函数。也就是把fn(a,b,c)转化为fn(a)(b)(c)

例子

例如一个函数接受a, b, c三个参数,返回它们的和:

function sum(a, b, c) {
    return a + b + c
}

运行此函数,我们在参数中依次传入1,2,3,返回6。

sum(1, 2, 3) // 6

函数柯里化之后:

function fn(a) {
    return (b) => {
        return (c) => {
            return a + b + c
        }
    }
}

fn(1)(2)(3) // 6

我们把sum(1, 2, 3)变成了fn(1)(2)(3)的形式。通过把一个多参函数转换成一系列嵌套的函数,每个函数依次接受一个参数,这就是函数柯里化。这里用到了高阶函数和闭包相关的知识,函数柯里化其实是高阶函数的应用。

什么是偏函数(Partial function)

它是指使用一个函数并将其应用一个或多个参数,但不是全部参数,在这个过程中创建一个新函数,这个函数用于接受剩余的参数。偏函数解决这样的问题:如果我们有函数是多个参数的,我们希望能固定其中某几个参数的值。

例子

/*
function sum(a, b, c) {
    return a + b + c
}
*/

// 使用偏函数的写法
function fn(a) {
    return (b, c) => {
        return a + b + c
    }
}

//变量foo接受返回的新函数
var foo = fn(1)

//在调用的时候传入剩余的参数
foo(2,3) // 6

总结

柯里化和偏函数都是用于将多个参数函数,转化为接受更少参数函数的方法,它们都能够固定参数。但是其中不同之处在于:

  • 柯里化是将函数转化为多个嵌套的一元函数,也就是每个函数只接受一个参数。
  • 偏函数可以接受不只一个参数,它被固定了部分参数作为预设,并可以接受剩余的参数。

相关文章

网友评论

      本文标题:函数柯里化与偏函数

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