# Scala 函數柯里化(Currying)
柯里化(Currying)指的是將原來接受兩個參數的函數變成新的接受一個參數的函數的過程。新的函數返回一個以原有第二個參數為參數的函數。
### 實例
首先我們定義一個函數:
```
def add(x:Int,y:Int)=x+y
```
那么我們應用的時候,應該是這樣用:add(1,2)
現在我們把這個函數變一下形:
```
def add(x:Int)(y:Int) = x + y
```
那么我們應用的時候,應該是這樣用:add(1)(2),最后結果都一樣是3,這種方式(過程)就叫柯里化。
### 實現過程
add(1)(2) 實際上是依次調用兩個普通函數(非柯里化函數),第一次調用使用一個參數 x,返回一個函數類型的值,第二次使用參數y調用這個函數類型的值。
實質上最先演變成這樣一個方法:
```
def add(x:Int)=(y:Int)=>x+y
```
那么這個函數是什么意思呢? 接收一個x為參數,返回一個匿名函數,該匿名函數的定義是:接收一個Int型參數y,函數體為x+y。現在我們來對這個方法進行調用。
```
val result = add(1)
```
返回一個result,那result的值應該是一個匿名函數:(y:Int)=>1+y
所以為了得到結果,我們繼續調用result。
```
val sum = result(2)
```
最后打印出來的結果就是3。
### 完整實例
下面是一個完整實例:
```
object Test {
def main(args: Array[String]) {
val str1:String = "Hello, "
val str2:String = "Scala!"
println( "str1 + str2 = " + strcat(str1)(str2) )
}
def strcat(s1: String)(s2: String) = {
s1 + s2
}
}
```
執行以上代碼,輸出結果為:
```
$ scalac Test.scala
$ scala Test
str1 + str2 = Hello, Scala!
```
- Scala 教程
- Scala 簡介
- Scala 安裝
- Scala 基礎語法
- Scala 數據類型
- Scala 變量
- Scala 訪問修飾符
- Scala 運算符
- Scala IF...ELSE 語句
- Scala 循環
- Scala while 循環
- Scala do...while 循環
- Scala do...while 循環
- Scala break 語句
- Scala 函數
- Scala 函數傳名調用(call-by-name)
- Scala 指定函數參數名
- Scala 函數 - 可變參數
- Scala 遞歸函數
- Scala 高階函數
- Scala 函數嵌套
- Scala 匿名函數
- Scala 偏應用函數
- Scala 函數柯里化(Currying)
- Scala 閉包
- Scala 字符串
- Scala 數組
- Scala Collection
- Scala List(列表)
- Scala Set(集合)
- Scala Map(映射)
- Scala 元組
- Scala Option(選項)
- Scala Iterator(迭代器)
- Scala 類和對象
- Scala Trait(特征)
- Scala 模式匹配
- Scala 正則表達式
- Scala 異常處理
- Scala 提取器(Extractor)
- Scala 文件 I/O