Open LeoWangJ opened 5 years ago
把支持多個參數的函式轉成只支持單一參數的函式形式,大多應用在函數式編程。
假設我們目前有一個相加函式
let add = (a,b) => a + b add(1,2) // return 3
使用curry方式來表達的話則是
let add = a => b => a + b add(1)(2)
使用閉包來記錄第一個參數使得執行返回的函數時能夠調用第一個參數來相加。
那假如我們希望使用一個函式能夠將多個參數形式的函式轉變成curry函式時該怎麼做呢?
let currify = (fn,params = []){ let newParams = params.conact(arg) return (arg) = >{ if(newParams.length === fn.length){ return fn(...newParams) } else { return currify(fn, newParams) } } } addTwo = (a,b)=>a+b addThree = (a,b,c)=>a+b+c let newAddTwo = currify(addTwo) newAddTwo(1)(2) // return 3 let newAddThree = currify(addThree) newAddThree(1)(2)(3) // return 6
上面currify的思路是
把支持多個參數的函式轉成只支持單一參數的函式形式,大多應用在函數式編程。
假設我們目前有一個相加函式
使用curry方式來表達的話則是
使用閉包來記錄第一個參數使得執行返回的函數時能夠調用第一個參數來相加。
那假如我們希望使用一個函式能夠將多個參數形式的函式轉變成curry函式時該怎麼做呢?
上面currify的思路是