码迷,mamicode.com
首页 > 其他好文 > 详细

[Scala] Currying

时间:2014-05-28 03:58:12      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

 

Currying是一種函數式編程技巧, 指的是把接受多個參數的函數變換成接受一個單一參數的函數。

以一個簡單的例子在Scala中實現..

bubuko.com,布布扣
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
bubuko.com,布布扣
 
看起來只是改變了放置參數的位置而已, 又有什麼用呢??
 
讓我們換個例子, 現在我們要實作出的Sumation函數,
bubuko.com,布布扣
 
而且其中f(x)是可代換的, 如,

bubuko.com,布布扣, bubuko.com,布布扣…....等

先來看看Currying的Sumation函數的代碼吧!!

bubuko.com,布布扣
def sumation(func:Int=>Int )(a:Int,b:Int):Int={
    if (a+1>b) 0
    else  sumation(func)(a+1,b)+func(a)   
   
  }
bubuko.com,布布扣

由Curring我拆成兩部分的參數

(func:Int=>Int ): 表示f(x)

(a:Int,b:Int): 表示Sumation的上下限範圍

這麼做的好處在於以代碼切分不同函數的概念不至於混雜, 增加代碼的可讀性與維護性

接下來讓我們來實作factorial函數

 
bubuko.com,布布扣
def factorial(n:Int):Int={
    if (n==0) 1 else n*factorial(n-1)
  }
  sumation(factorial)(1,3)
  //res0: Int = 9
bubuko.com,布布扣
   
 
 
 
 

[Scala] Currying,布布扣,bubuko.com

[Scala] Currying

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/YangMark/p/3753312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!