書名: Swift Functional Programming(Second Edition)作者名: Dr. Fatih Nayebi本章字數(shù): 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")
- Java Data Science Cookbook
- 商業(yè)分析思維與實踐:用數(shù)據(jù)分析解決商業(yè)問題
- Mastering Machine Learning with R(Second Edition)
- Dependency Injection with AngularJS
- 數(shù)據(jù)驅(qū)動設(shè)計:A/B測試提升用戶體驗
- 數(shù)據(jù)架構(gòu)與商業(yè)智能
- 數(shù)據(jù)庫原理與應(yīng)用(Oracle版)
- Proxmox VE超融合集群實踐真?zhèn)?/a>
- Instant Autodesk AutoCAD 2014 Customization with .NET
- 探索新型智庫發(fā)展之路:藍迪國際智庫報告·2015(上冊)
- 聯(lián)動Oracle:設(shè)計思想、架構(gòu)實現(xiàn)與AWR報告
- Python數(shù)據(jù)分析從小白到專家
- 算力經(jīng)濟:從超級計算到云計算
- Unity Game Development Blueprints
- 數(shù)據(jù)中臺實戰(zhàn):手把手教你搭建數(shù)據(jù)中臺