1. 柯里化
在計算機科學中,柯里化(英語:Currying),又譯爲卡瑞化或加里化,是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且返回結果的新函數的技術。
柯里化是一種處理函數中附有多個參數的方法,並在只允許單一參數的框架中使用這些函數。例如,一些分析技術只能用於具有單一參數的函數。現實中的函數往往有更多的參數。
2. lodash
一個一致性、模塊化、高性能的 JavaScript 實用工具庫。
Lodash 通過降低 array、number、objects、string 等等的使用難度從而讓 JavaScript 變得更簡單。
Lodash 的模塊化方法 非常適用於:
- 遍歷 array、object 和 string
- 對值進行操作和檢測
- 創建符合功能的函數
3. _.curry示例
let _ = require('lodash');
let abc = (a,b,c)=>[a,b,c];
let curried = _.curry(abc);
let result = curried(1)(2)(3);
console.log(result); // => [1, 2, 3]
result = curried(1, 2)(3);
console.log(result); // => [1, 2, 3]
result = curried(1, 2, 3);
console.log(result); // => [1, 2, 3]
// Curried with placeholders.
let result2 = curried(1)(_, 3)(2);
console.log(result2); // => [1, 2, 3]
如上述示例代碼,原先的abc
方法接收3個參數。經過柯里化後的curried
可以分次接收這三個參數而不需要一次獲取。
另外,_.curry
支持佔位符placeholder
,使用_
作爲佔位符相當於允許參數可以不按照固有的傳參順序進行調用。
比如上述代碼中的curried(1)(_, 3)(2);
在這裏先傳入了參數1
,在第二個參數還沒有ready的情況下,傳入了一個佔位符_
和參數3
, 最後傳入第二個參數2
不在佔位符的位置。 所以最終的返回結果還是[1,2,3]。
result2 = curried(_)(2,2)(1);
console.log(result2); // [2,2,1]
result2 = curried(_,2)(3)(1);
console.log(result2) // [2,3,1]
注意
1. _.curry()提供的佔位符_
會被其相鄰
的下一次函數調用的第一個參數所填充。
2. 必須傳入原函數所需要的所有參數後才能實現函數的調用。當爲傳入全部參數時,其response是一個柯里化的函數。
let curriedFunc = curried(1,2);
console.log(typeof curriedFunc); // function