swift 柯里化

Swift 里可以将方法进行柯里化 (Currying),这是也就是把接受多个参数的方法进行一些变形,使其更加灵活的方法。函数式的编程思想贯穿于 Swift 中,而函数的柯里化正是这门语言函数式特点的重要表现。

举个例子,下面的函数简单地将输入的数字加 1:

func addOne(num: Int) -> Int {

return num + 1

}

这个函数所表达的内容非常有限,如果我们之后还需要一个将输入数字加 2,或者加 3 的函数,可能不得不类似地去定义返回为 num + 2 或者 num + 3 的版本。有没有更通用的方法呢?我们其实可以定义一个通用的函数,它将接受需要与输入数字相加的数,并返回一个函数。返回的函数将接受输入数字本身,然后进行操作:

func addTo(_ adder: Int) -> (Int) -> Int {

  return {

    num in

    return num + adder

   }

}

有了 addTo,我们现在就能轻易写出像是 addOne 或者 addTwo 这样的函数了:

let addTwo = addTo(2)    // addTwo: Int -> Int

let result = addTwo(6)  // result = 8

再举一个例子,我们可以创建一个比较大小的函数:

func greaterThan(_ comparer: Int) -> (Int) -> Bool {

  return { $0 > comparer }

}

let greaterThan10 = greaterThan(10);

greaterThan10(13)    // => true

greaterThan10(9)    // => false

柯里化是一种量产相似方法的好办法,可以通过柯里化一个方法模板来避免写出很多重复代码,也方便了今后维护。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 柯里化(Currying) 是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接...
    lotawei阅读 292评论 0 0
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,864评论 0 6
  • 2014年的苹果全球开发者大会(WWDC),当Craig Federighi向全世界宣布“We have new ...
    yeshenlong520阅读 2,311评论 0 9
  • 柯里化(currying)在维基百科的解释是把接受多个参数函数变换成接受一个单一参数(最初函数的第一个参数)的函数...
    大哥带你去玩耍阅读 449评论 0 2
  • 前言 第一次接触柯里化感觉这个方法很奇怪,当然奇怪也很正常,毕竟苹果总是不走寻常路的。理解柯里化需要有一定的Swi...
    槛内浊物阅读 787评论 0 5