Partial Application 是當 Function 提供不足 Argument 時,會回傳以剩下 Argument 所構成的新 Function,這種看似神奇的概念,事實上 bind()
就能實現。
Version
macOS Catalina 10.15.4
VS Code 1.43.2
Quokka 1.0.285
ECMAScript 2015
Ramda
import { add } from 'ramda'
let add5 = add(5)
add5(2) // ?
Ramda 所提供的 function 都支援 partial application,如 add()
原本需要兩個 argument,若僅提供 5
亦可回傳新的 add5()
而不會 runtime 錯誤。
bind()
let add = (x, y) => x + y
let add5 = add.bind(null, 5)
add5(2) // ?
add()
為普通 function,可使用 Array.prototype.bind()
實現 partial application,第一個 argument 因為沒有要取代 this
,因此傳入 null
即可,之後可傳入 argument,bind()
將以剩下的 argument 成為新的 function。
Conclusion
- Partial application 為 FP 重要概念,也是 point-free 與 function composition 的理論基礎,事實上
bind()
已經支援 partial application,只是語法不夠漂亮而已