若想將原本 Variadic Function 改成接受 Array 的 Unary Function,可使用 apply()
加以轉換。
Version
Ramda 0.27.1
Function.prototype.apply()
Math.max.apply(null, [1, 2, 3]) // ?
Math.max()
為 variadic function,若我們想改用 Array 傳入,可使用 Function.prototype.apply()
加以轉換,其中 apply()
第一個 argument 可提供 Object 取代 function 中的 this
,因為 add()
沒使用 this
,且我們也沒有要取代 this
,因此傳入 null
。
apply()
import { apply } from 'ramda'
apply(Math.max)([1, 2, 3]) // ?
也可使用 Ramda 的 apply()
加以轉換。
apply()
(*… → a) → [*] → a
將 variadic function 轉換成能接受 Array
(*… → a)
:原本多 argument function
[*] -> a
:回傳以 Array 為輸入的 function
Function Pipeline
import { pipe, map, inc, apply } from 'ramda'
let data = [1, 2, 3]
let f = pipe(
map(inc),
apply(Math.max)
)
f(data) // ?
apply()
價值在於可將 variadic function 轉成 unary function 方便 Function Pipeline。
使用 pipe()
組合 f()
:
map(inc)
:將 Array 每個 element+1
apply(Math.max)
:判斷 Array 中最大值
Conclusion
- Ramda 的
apply()
使用上較Function.prototype.apply()
精簡,且適合 Function Pipeline
Reference
Ramda, apply()
Samantha Ming, Passing Array as Function Arguments