Swift 柯里化(Currying)

简介: 在计算机科学中,柯里化(英语:Currying),又譯為卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

在计算机科学中,柯里化(英语:Currying),又譯為卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家哈斯凱爾·加里命名的,尽管它是 Moses Schönfinkel 和 戈特洛布·弗雷格 发明的。

------维基百科


Swift支持将方法柯里化,类似于批量创建某个带有固定参数的方法,就像下面这个例子,用Swift做个简单的加法运算:

func sum(a: Int,b: Int) -> Int {

    return a + b

}

sum(12)   //输出3

创建一个柯里化的方法很容易,虽然看起来似乎和我们以前写的方法不太一样,但大体来说是相似的:


参数列表的每个参数都用单独的圆括号括起来,其他部分都和以前一样,把上面那个简单的Swift标准方法改成柯里化之后就像这样:

func sum(a: Int)(b: Int) -> Int {

    return a + b

}

var sumByFirst = sum(1)

sumByFirst(b: 4//输出5

只需要传入第一个参数,返回的sumByFirst是一个函数,它包含剩余的其他参数,以及刚刚传入进去的那个1,接着以它自己作为方法传入第二个参数b就行了。

如果是三个参数就像这样: 

func sum(a: Int)(b: Int)(c: Int) -> Int {

    return a + b + c

}

var sumByFirst = sum(1)

var sumBySecond = sumByFirst(b: 4)

sumBySecond(c: 10)  //输出15

除了第一个参数以外,其他的参数都要显式地写上参数标签,并且要按参数排列的顺序调用。

一个括号中放两个参数也可以: 

func sum(a: Int)(b: Int, c: Int) -> Int {

    return a + b + c

}

var sumByFirst = sum(1)

sumByFirst(b: 4,c: 10)  //输出15

在某些情况下,你可能会用某个相同的参数重复调用某个方法,那么利用柯里化会使代码更易于维护:

func sum(a: Int)(b: Int) -> Int {

    return a + b

}

var sumWithFive = sum(5)

sumWithFive(b: 5)

sumWithFive(b: 10)

sumWithFive(b: 15)


目录
相关文章
|
安全 Swift
Swift-Currying(柯里化)
柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数切返回结果的新函数的技术
187 0
|
Swift
swift 学习笔记之在柯里化(Currying)
    有时候我们看到的方法中有很多组的参数,可能会让大家觉得疑惑,其实是因为这个方法使用了柯里化。
929 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
91 2
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
196 2
|
3月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
225 1
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
65 0
|
5月前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
58 1
|
7月前
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
49 0
|
Swift iOS开发
IOS使用Swift加载Xib文件
IOS使用Swift加载Xib文件
253 0
|
Swift iOS开发
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
219 0
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人

相关课程

更多