神刀安全网

Swift_currying(柯里化)


一. Currying解释

  1. currying 翻译为局部套用.又称为部分求值(Partial Evaluation), 是一种函数式编程思想,在Swfit4.0的 时候已经废弃了函数的柯里化. 函数的 currying 特性的使用场景并不大,但他会增加很多语言的复杂性,所以需要删除它,但是柯里化函数式编程思想还是很重要的.
  1. 特点:
    只用“表达式”(表达式:单纯的运算过程,总是有返回值),不用“语句”(语句:执行某种操作,没有返回值)。2.不修改值,只返回新值。
  1. 好处:
    代码简洁
    提高代码复用性
    代码管理方便,相互之间不依赖,每个函数都 是一个独立的模块,很容易进行单元测试。
    易于“并发编程”,因为不修改变量的值,都是返回新值。

二. 代码示例

需求: 需要三个函数.

  • 第一个函数,在自身上+1.
  • 第一个函数,在自身上+2.
  • 第一个函数,在自身上+3.
    func addTo(_ adder : Int) -> (Int) -> Int {         return {             num in             return num + adder         }     }     // 使用    let addOne = addTo(1000)    let result_one = addOne(1)    print(result_one)            /**          addTo(1000) 返回一个闭包 (Int) -> Int          num in 的意思是: 用in把参数和方法隔开. num就是闭包的入参(Int)          该闭包里面执行的是 return num + adder.    */ 
// 这是一个字符串的示例     func strAppends(_ a : String) -> (String) -> String {         return {             b in             return a + b         }     } 
将一个普通的三个入参的函数转化为柯里化函数
    func add(a: Int, b: Int, c: Int) -> Int{         print("/(a) + /(b) + /(c)")         return a + b + c     } 
    func add(_ a: Int) -> (Int) -> (Int) -> Int{         return {             b in             return {                 c in                 a + b + c             }         }     }     // 使用    let one = add(1)    let result = one(2)(3)    print(result) 
没有返回值的
    func printString(_ month : Int) -> (Int) -> (String) -> Void {          return {             day in             return {                 action in                 print("/(month)月" + "/(day)日" + "/(action)")             }         }     }  // 使用 printString(8)(25)("我想找个对象") // 输出:  8月25日我想找个对象 

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » Swift_currying(柯里化)

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址