- 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")
- Visual Studio 2015 Cookbook(Second Edition)
- 使用GitOps實現Kubernetes的持續部署:模式、流程及工具
- Spark核心技術與高級應用
- Oracle高性能自動化運維
- OracleDBA實戰攻略:運維管理、診斷優化、高可用與最佳實踐
- 數據庫技術實用教程
- ZeroMQ
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- 二進制分析實戰
- 貫通SQL Server 2008數據庫系統開發
- 區域云計算和大數據產業發展:浙江樣板
- 大數據測試技術:數據采集、分析與測試實踐(在線實驗+在線自測)
- Redis 6開發與實戰
- MySQL核心技術手冊
- GameMaker Game Programming with GML