Swift 中的咖喱(Curried )函数

Swift 中的咖喱(Curried )函数 

NM, 刚想正经写一篇技术的博客,却发现咖喱函数表示在Swift (当前为3.0)中已经被去掉了!不过,善始善终,我还是把这篇写完吧。

咖喱函数是一个源至函数式编程的概念。首先考虑我们所熟悉的带有默认参数的函数。一个带有参数的函数可以设一个或多个参数的默认值。在函数被调用时,如果不指定,会自动使用这些默认值。因为函数的默认参数值是在编译时就决定了的,所以在运行时不能被改变。

而咖喱函数提供了进一步的灵活性,这个值是在运行时决定的,因而是“可变的”。对应于一个已有的函数,它可以生成一个对应的将其中某个参数固化了的函数。下面看例子

通常的情形:

func addTwoNumbers(first: Int, second, Int) -> Int {

    return first + second

}

addTwoNumbers(first: 1, second: 2)

对应的咖喱函数是

fun addTwoNumbers_Curried(first Int)(second: Int) -> Int {

return first + second

}

看起来没有太大不同吧,下面看看如何使用

let addTwoNumbers_4 = addTwoNumbers_Curried(4)

let addTwoNumbers_6 = addTwoNumbers_Curried(6)

addTwoNumbers_4(second: 8)                  // 12

addTwoNumbers_6(second: 8)                  // 14

更有用的是

func foo() -> Int {

...

}

let addTwoNumbers_Foo = addTwoNumbers_Curried(foo())

addTwoNumbers_Foo(8)                             // foo() + 8

可以给一个加了咖喱的函数继续加咖喱么?Why not?

参考:

https://ijoshsmith.com/2014/06/09/curried-functions-in-swift/

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

推荐阅读更多精彩内容

  • 86.复合 Cases 共享相同代码块的多个switch 分支 分支可以合并, 写在分支后用逗号分开。如果任何模式...
    无沣阅读 1,460评论 1 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,926评论 1 10
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,318评论 3 25
  • 大暑 文||与你相识 把岁月深处的盐 注入生活的精彩 那些炎热和微笑 像期待的一场风 夜从晃动的叶面经过 把大暑的...
    与你相识_40fa阅读 174评论 1 4