美文网首页
柯里化的介绍(Curried Closure)

柯里化的介绍(Curried Closure)

作者: 平飞兄 | 来源:发表于2015-01-24 13:57 被阅读0次

柯里化是一个看起来比较费解的名字,特意到wiki上找了一下,这是它的定义:在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由Christopher Strachey以逻辑学家哈斯凯尔·加里命名的,尽管它是Moses Schönfinkel和戈特洛布·弗雷格发明的。
不过我们可以通过简单的事例来轻易理解它。先一句话概括就是:先给闭包绑定一些参数,每次绑定之后,在绑定完成的对象看来,这个参数就是不需要传递的参数了,用户只需要传递剩余的参数过来就可以。
示例如下:
1、先定义一个函数,参数是一个闭包:

def printFavorite(Closure closure){
   def curryobj = closure.curry("小明","浙江杭州",30)
   def rcurryobj = closure.rcurry("浙江-杭州",30,"大河恋")
   def ncurryobj = closure.ncurry(2,30).ncurry(1, "浙江杭州").ncurry(0, "小明")
   curryobj "战争与和平"
   curryobj "三国演义"
   curryobj "红与黑"
   curryobj "倾城之恋"
   rcurryobj "小明"
   ncurryobj "楚门的世界 "
}

2、接下来是闭包定义

def bibao = {name,address,age,book->
        println "名字:$name  地址:$address   年龄:$age 书名:$book"
}

3、调用语句

printFavorite(bibao)

结果:

名字:小明 地址:浙江杭州 年龄:30 书名:战争与和平
名字:小明 地址:浙江杭州 年龄:30 书名:三国演义
名字:小明 地址:浙江杭州 年龄:30 书名:红与黑
名字:小明 地址:浙江杭州 年龄:30 书名:倾城之恋
名字:小明 地址:浙江-杭州 年龄:30 书名:大河恋
名字:小明 地址:浙江杭州 年龄:30 书名:楚门的世界

总结下:闭包调用curry方法之后,可以按照顺序来绑定参数,获得一个柯里化对象,之后调用这个柯里化对象就可以不用传入这个参数了。细心的同学应该还可以看到,这里groovy还提供了倒序柯里化的方法rcurry,以及指定位置柯里化的ncurry方法,只要跑几个例子就可以明白,不在赘述了。

相关文章

  • 柯里化的介绍(Curried Closure)

    柯里化是一个看起来比较费解的名字,特意到wiki上找了一下,这是它的定义:在计算机科学中,柯里化(英语:Curry...

  • swift Tips

    swift curried(柯里化) func greaterThan(comparor: Int)(input:...

  • JavaScript柯里化 —— 写个更好的curry方法

    昨天翻译的文章中,原作者对于柯里化方法的最终实现是这样: 这个实现存在一点问题: curried 第一次运行功能正...

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • Swift 柯里化

    Swift 柯里化 前言:在Swift中,柯里化在业务层的使用比较少,本文旨在介绍基本的柯里化的基本概念和基本使用...

  • 柯里化函数介绍

    柯里化实际是把简答的问题复杂化了,但是复杂化的同时,我们在使用函数时拥有了更加多的自由度。 而这里对于函数参数的自...

  • Swift函数柯里化介绍及使用场景

    函数柯里化是函数式编程里的一个重要概念。swift中的柯里化可能很多人都没有了解过,今天给大家介绍一下柯里化的概念...

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 函数式编程(三)—— 柯里化

    柯里化Lodash中的柯里化 —— curry()案例柯里化原理模拟柯里化总结 【函数式编程总体设计】 之前讲了函...

  • 简单理解JavaScript中的柯里化和反柯里化

    简单理解JavaScript中的柯里化和反柯里化 前言 本文旨在让大家简单理解柯里化和反柯里化,这里不做深入探究,...

网友评论

      本文标题:柯里化的介绍(Curried Closure)

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