函式柯理化的表現是:把乙個需要傳入多個變數的函式變為多個巢狀函式,並且內層函式會呼叫上層函式的變數。
現在有乙個簡單的add
函式:
function add(x, y)
console.log(add(1, 2)); // 3
將其改為柯理化函式
function add2(x)
}console.log(add2(1)(2)); // 3
從上面的例子可以看出,柯理化很像現在流行的元件化開發模式,將多個函式模組組合起來,得到乙個新的函式。
柯理化函式的核心是閉包,因為閉包,所以內層函式才能夠保留父作用域中的變數。
通用柯理化函式
1. 版本一
建立乙個通用的柯理化函式的方式如下:
function currying(fun)
}
可以看到,currying
函式將除了第乙個fn變數,將其他引數變數都賦值在args
變數中,然後將其合併在返回函式的變數引數中,給返回函式使用。
現在,利用currying
改造乙個支援多個入參的add
函式(採用es6語法):
// 支援多個入參
function add(...vals) );
}var newadd = currying(add, 1, 2, 3);
console.log(newadd(4, 5, 6)); // 21
這種方式建立的柯理化函式只能呼叫一次。
2. 版本二
再實現一種柯理化工廠函式,可以多次呼叫,最後統一求值。
function currying(fn)
else }}
利用上面的currying
改造add
函式:
function add() );
}var newadd = currying(add, 1, 2, 3);
newadd(4, 5);
newadd(6, 7);
console.log(newadd()); // 28
這種方式,把每次函式呼叫的引數都儲存起來,如果已無參形式呼叫,說明記錄結束,需要做最終計算。
小結總之,柯理化就是利用模組化思想處理多參函式,通過組合函式減少每個函式的入參數量,從而提高**的可閱讀性及可維護性。
Scala柯理化函式
柯里化 currying 指的是將原來接受兩個引數的函式變成新的接受乙個引數的函式的過程。新的函式返回乙個以原有第二個引數為引數的函式。首先我們定義乙個函式 def add x int,y int x y那麼我們應用的時候,應該是這樣用 add 1,2 現在我們把這個函式變一下形 def add x...
函式柯里化是什麼?
柯里化,英語 currying,是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數而且返回結果的新函式的技術。普通的add函式 function add x,y currying後 function curryingadd x add 1,2 3 cu...
什麼是函式
從數學到程式設計,了解什麼是函式!函式 function 的定義通常分為傳統定義和近代定義,函式的兩個定義本質是相同的,只是敘述概念的出發點不同,傳統定義是從運動變化的觀點出發,而近代定義是從集合 對映的觀點出發。函式的近代定義是給定乙個數集a,假設其中的元素為x,對a中的元素x施加對應法則f,記作...