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函數,
[Scala] Currying
 
而且其中f(x)是可代換的, 如,

[Scala] Currying, [Scala] Currying…....等

先來看看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
   
 
 
 
 

相关文章:

  • 2021-10-12
  • 2021-09-06
  • 2022-02-13
  • 2022-12-23
  • 2021-05-17
  • 2021-08-02
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-01-26
  • 2021-10-26
  • 2022-12-23
  • 2022-02-27
  • 2021-09-22
  • 2022-12-23
相关资源
相似解决方案