Scala 函式柯里化 Currying

2021-10-03 00:21:19 字數 1141 閱讀 8241

柯里化(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 strcat

(s1: string)

(s2: string)

=}

執行以上**,輸出結果為:

$ scalac test.scala

$ scala test

str1 + str2 = hello, scala!

Scala函式式程式設計 Curry柯里化

函式式程式設計的乙個思想 只傳遞給函式一部分引數來呼叫函式,然後返回乙個函式去處理剩下的引數。簡單說curry就是對高階函式 就是一種對過程的抽象 參考map它就是乙個抽象的過程 的降階處理。比如 function arg1,arg2 變成function arg1 arg2 function ar...

Scala 27 函式柯里化(curry)

函式程式設計中,接受多個引數的函式都可以轉化為接受單個引數的函式,這個轉化過程就叫柯里化。柯里化就是證明了函式只需要乙個引數而已。常規 def mul x int,y int x y println mul 10 10 閉包 def mulcurry x int y int x y println ...

函式柯里化 curry

一 函式柯里化的特性 1 引數復用 ajax 示例一 function ajax type,url,data var ajaxcurry curry ajax 以get請求為例 示例二 function add a,b,c const curryadd function a console.log ...