前言
此次文章,讲述的是Swift的一个新特性(柯里化函数),可能很多iOS开发人员是第一次听这个词汇,包括我自己也是,自己也用了几天时间才总结出来,希望能帮助到各位咯,个人感觉偏向有开发经验的码友,如果零基础的看懂,希望能给个赞!
什么是柯里化函数?
柯里化(Currying),又称部分求值(Partial Evaluation),是一种函数式编程思想,就是把接受多个参数的函数转换成接收一个单一参数(最初函数的第一个参数)的函数,并且返回一个接受余下参数的新函数技术。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | classCurrying { //uncurrIEd:普通函数 //接收多个参数的函数(与类相关的函数,统称为方法,但是这里就直接说函数了,方便理解) funcadd(a:Int,b:Int,c:Int)->Int{ println( "\(a)+\(b)+\(c)" ) return a+b+c } //currIEd:柯里化函数 //柯里化函数,Swift中已经支持这样的语法了,可以直接写 funcaddCur(a:Int)(b:Int)(c:Int)->Int{ ) a+b+c } } |
如何定义柯里化函数?
如图定义柯里化函数:
柯里化函数实现原理
/***uncurrIEd:普通函数***/ //接收多个参数的函数 /***手动实现柯里化函数***/ //把上面的函数转换为柯里化函数,首先转成接收第一个参数a,并且返回接收余下第一个参数b的新函数(采用闭包) //为了让大家都能看懂,我帮你们拆解来看下 //(a:Int):参数 //(b:Int)->(c:Int)->Int:函数返回值(一个接收参数b的函数,并且这个函数又返回一个接收参数c,返回值为Int类型的函数) //定义一个接收参数a,并且返回一个接收参数b的函数,返回值为Int类型的函数 funcadd(a:Int)->(b:Int)->(c:Int)->Int{ //一个接收参数b的函数,返回值为Int类型的函数 {(b:Int)->(c:Int)->Int in //返回一个接收余下第一个参数c,并且有返回结果为Int类型的函数 {(c:Int)->Int in a+b+c; 注解:这里为什么能使用参数a,b,c? 利用闭包的值捕获特性,即使这些值作用域不在了,也可以捕获到他们的值。 闭包会自动判断捕获的值是值拷贝还是值引用,如果修改了,就是值引用,否则值拷贝。 注意只有在闭包中才可以,a,c都在闭包中。 } } } /***currIEd:系统自带的柯里化函数***/ funcaddCur(a:Int)(b:Int)(c:Int)->Int{ ) a+b+c } 如何调用柯里化函数 |
评论列表(0条)