在計算機科學中,柯裡化(英語:Currying),又譯為卡瑞化或加裡化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,并且傳回接受餘下的參數而且傳回結果的新函數的技術。這個技術由 Christopher Strachey 以邏輯學家哈斯凱爾·加裡命名的,盡管它是 Moses Schönfinkel 和 戈特洛布·弗雷格 發明的。 ------維基百科 |
Swift支援将方法柯裡化,類似于批量建立某個帶有固定參數的方法,就像下面這個例子,用Swift做個簡單的加法運算:
func sum(a: Int,b: Int) -> Int {
return a + b
}
sum(1, 2) //輸出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)