多 Argument Function 並不適合 Function Pipeline,實務上會透過 apply()
轉成 Unary Function,並透過 list()
準備 Argument。
Version
Wink-fp 1.27.1
apply()
import { pipe, always, apply } from 'ramda'
let add = (x, y, z) => x + y + z
pipe(
always([1, 2, 3]),
apply(add)
)() // ?
第 3 行
let add = (x, y, z) => x + y + z
add()
為 ternary function 並不適合 Function Pipeline。
第 5 行
pipe(
always([1, 2, 3]),
apply(add)
)() // ?
組合出 IIFE:
always([1, 2, 3])
:將 argument 以 Array 呈現apply(add)
:將add()
轉成 unary function
list()
import { pipe, apply, thunkify } from 'ramda'
let add = (x, y, z) => x + y + z
let list = thunkify(Array.of)
pipe(
list(1, 2, 3),
apply(add)
)() // ?
第 5 行
let list = thunkify(Array.of)
原生的 Array.of()
就可將值轉成 Array,使用 thunkify()
轉成 list()
方便 Function Pipeline。
第 7 行
pipe(
list(1, 2, 3),
apply(add)
)() // ?
組合出 IIFE:
list(1, 2, 3)
:將 argument 以 Array 回傳apply(add)
:將add()
轉成 unary function
Wink-fp
import { pipe, apply } from 'ramda'
import { list } from 'wink-fp'
let add = (x, y, z) => x + y + z
pipe(
list(1, 2, 3),
apply(add)
)() // ?
Wink-fp 已經提供 apply()
可直接使用。
list()
a... -> () -> [a...]
a...
:可提供不限個數 argument
() -> [a...]
:回傳新 function,而此新 function 回傳 Array
Conclusion
- 實務上常在 Function Pipeline 中使用
apply()
將多 argument function 轉成 unary function,此時可搭配list()
傳入 argument,會比使用always()
精簡