需要帮助理解使用groovy关闭的currying?
发布时间:2020-12-14 16:35:06 所属栏目:大数据 来源:网络整理
导读:我正在努力理解函数式编程中的工作原理.我已经经历了 wiki和几个关于同样的问题. Need help understanding lambda (currying) What is ‘Currying’? 我明白,currying是关于将一??个函数分成n个参数到n个或更少的函数,每个函数有一个参数.理论上理解它,但是
我正在努力理解函数式编程中的工作原理.我已经经历了
wiki和几个关于同样的问题.
Need help understanding lambda (currying) What is ‘Currying’? 我明白,currying是关于将一??个函数分成n个参数到n个或更少的函数,每个函数有一个参数.理论上理解它,但是我编码的时候不能连接点.也许是我在功能编程语言或C#中缺乏知识(上述问题中的许多答案都是这样). 无论如何,我理解groovy& java的.所以我试图在groovy中获得标准的add(a,b)函数的大纲,但是我无法完成它. def closure = { arg -> // ?? } def add(anotherClosure,a){ return closure // ?? } 有人可以帮我理解使用groovy关闭的currying吗? 解决方法
您可以通过编写一个封闭来滚动自己的currying功能,该闭包可以使用另一个闭包和curried参数进行设置,并返回一个使用该值的闭包.
// Our closure that takes 2 parameters and returns a String def greet = { greeting,person -> "$greeting $person" } // This takes a closure and a default parameter // And returns another closure that only requires the // missing parameter def currier = { fn,param -> { person -> fn( param,person ) } } // We can then call our currying closure def hi = currier( greet,'Hi' ) // And test it out hi( 'Vamsi' ) 但是你最好坚持使用内置的Groovy咖喱法as shown by jalopaba.(还有rcurry和ncurry,分别从右边和给定的位置咖喱) 应该说,Groovy咖喱法是一个误称,因为它更像是partial application的情况,因为你不需要关闭只需要一个参数,即: def addAndTimes = { a,b,c -> ( a + b ) * c } println addAndTimes( 1,2,3 ) // 9 def partial = addAndTimes.curry( 1 ) println partial( 2,3 ) // 9 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |