- Swift Functional Programming(Second Edition)
- Dr. Fatih Nayebi
- 247字
- 2021-07-02 23:54:34
Function currying
Function currying translates a single function with multiple arguments into a series of functions each with one argument. Let's examine an example.
Suppose that we have a function that combines firstName and lastName to return the full name as follows:
func extractFullName(firstName: String, lastName: String) -> String {
return "\(firstName) \(lastName)"
}
This function could be translated into a curried function as follows:
func curriedExtractFullName(firstName: String)(lastName: String) -> String {
return "\(firstName) \(lastName)"
}
As seen from this example, we replace the comma with ) ( parentheses. So now we can use this function as follows:
let fnIncludingFirstName = curriedExtractFullName("John")
let extractedFullName = fnIncludingFirstName(lastName: "Doe")
Here, fnIncludingFirstName will already have firstName in it so that, when we use it, we can provide lastName and extract the full name.
Starting with Swift 2.2, Apple deprecated function currying and removed it from Swift 3.0. We can convert the function currying to returning a closure explicitly:
// Before:
func curried(x: Int)(y: String) -> Float {
return Float(x) + Float(y)!
}
// After:
func curried(x: Int) -> (String) -> Float {
return {
(y: String) -> Float in
return Float(x) + Float(y)!
}
}
Let's convert our curried function to return the closure version explicitly:
func explicityRetunClosure(firstName: String) -> (String) -> String {
return {
(lastName: String) -> String in
return "\(firstName) \(lastName)"
}
}
We can use this function as follows and the result is going to be identical:
let fnIncludingFirstName = explicityRetunClosure(firstName: "John")
let extractedFullName = fnIncludingFirstName("Doe")
- Building Computer Vision Projects with OpenCV 4 and C++
- DB29forLinux,UNIX,Windows數據庫管理認證指南
- SQL Server 2008數據庫應用技術(第二版)
- Creating Mobile Apps with Sencha Touch 2
- Python醫學數據分析入門
- 數據庫程序員面試筆試真題庫
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 區塊鏈技術應用與實踐案例
- 深入理解InfluxDB:時序數據庫詳解與實踐
- The Natural Language Processing Workshop
- Oracle 11g+ASP.NET數據庫系統開發案例教程
- 數據挖掘與機器學習-WEKA應用技術與實踐(第二版)
- 精通Neo4j
- Nagios Core Administrators Cookbook
- 2D 計算機視覺:原理、算法及應用