柯里化再談

2021-08-05 18:35:15 字數 1162 閱讀 4051

柯里化其實本身是固定乙個可以預期的引數,並返回乙個特定的函式,處理批特定的需求。這增加了函式的適用性,但同時也降低了函式的適用範圍。

實現乙個函式,運算結果可以滿足如下預期結果:

add(1)(2) // 3

add(1, 2, 3)(10) // 16

add(1)(2)(3)(4)(5) // 15

剛好這個功能要實現的就是柯里化的思想。把接受多個引數的函式變換成接受乙個單一引數(最初函式的第乙個引數)的函式,並且返回 能接受餘下的引數且返回結果的新函式的技術。在這裡新函式的功能就是相加。

柯里化起到了引數復用的作用。

function add () 

//最後一次返回fn時,自動呼叫tostring

fn.tostring = function () )

}return fn;

}

擴充套件知識,用到了js的reduce方法。

已知 fn 為乙個預定義函式,實現函式 curryit,呼叫之後滿足如下條件:

1、返回乙個函式 a,a 的 length 屬性值為 1(即顯式宣告 a 接收乙個引數)

2、呼叫 a 之後,返回乙個函式 b, b 的 length 屬性值為 1

3、呼叫 b 之後,返回乙個函式 c, c 的 length 屬性值為 1

4、呼叫 c 之後,返回的結果與呼叫 fn 的返回值一致

5、fn 的引數依次為函式 a, b, c 的呼叫引數

var fn = function (a, b, c) ; curryit(fn)(1)(2)(3);

6

思路:柯里化起到了延遲執行的作用。

function curryit(fn) {

var args = array.prototype.slice.call(arguments,1);

return args.length還有固定易變因素的作用。

柯里化特性決定了它這應用場景。提前把易變因素,傳參固定下來,生成乙個更明確的應用函式。最典型的代表應用,是bind函式用以固定this這個易變物件。

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

柯里化與反柯里化

柯里化,可以理解為提前接收部分引數,延遲執行,不立即輸出結果,而是返回乙個接受剩餘引數的函式。因為這樣的特性,也被稱為部分計算函式。柯里化,是乙個逐步接收引數的過程。在接下來的剖析中,你會深刻體會到這一點。反柯里化,是乙個泛型化的過程。它使得被反柯里化的函式,可以接收更多引數。目的是建立乙個更普適性...

Scala柯里化和反柯里化

名詞解釋 在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。柯里化舉例說明 def curry1 a,b,c a a,f a,b c b c b b f a,b 這個函式的結果是乙個高階...