Currying是一種函數式編程技巧, 指的是把接受多個參數的函數變換成接受一個單一參數的函數。
以一個簡單的例子在Scala中實現..
def f(a:Int, b:Int)={
a+b
}
//f(2,3)=5//Currying
def curried(a:Int)(b:Int){
a+b
}
//f(2)(3)=5
看起來只是改變了放置參數的位置而已, 又有什麼用呢??
讓我們換個例子, 現在我們要實作出的Sumation函數,
而且其中f(x)是可代換的, 如,
,
…....等
先來看看Currying的Sumation函數的代碼吧!!
def sumation(func:Int=>Int )(a:Int,b:Int):Int={
if (a+1>b) 0
else sumation(func)(a+1,b)+func(a)}
由Curring我拆成兩部分的參數
(func:Int=>Int ): 表示f(x)
(a:Int,b:Int): 表示Sumation的上下限範圍
這麼做的好處在於以代碼切分不同函數的概念不至於混雜,
增加代碼的可讀性與維護性
接下來讓我們來實作factorial函數
def factorial(n:Int):Int={
if (n==0) 1 else n*factorial(n-1)
}
sumation(factorial)(1,3)
//res0: Int = 9
[Scala] Currying,布布扣,bubuko.com
时间: 2024-12-17 08:01:03