标签:style c class blog code java
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
标签:style c class blog code java
原文地址:http://www.cnblogs.com/YangMark/p/3753312.html