點燈坊

學而時習之,不亦悅乎

使用 unapply() 將單一參數 Function 變成多參數

Sam Xiao's Avatar 2019-07-07

將原本單一 Argument Function,透過 Ramda 的 unapply() 成為多 Argument Function。

Version

macOS Mojave 10.14.5
VS Code 1.31.1
Quokka 1.0.212
Ramda 0.26.1

Function

// add :: [a] -> a
let add = arr => arr[0] + arr[1] + arr[2];

add([1, 2, 3]); // ?

add() 為普通 function,只有 1 個 array 為 argument。

unapply000

unapply()

import { unapply } from 'ramda';

// add :: [a] -> a
let add = arr => arr[0] + arr[1] + arr[2];

// add_ :: (*...) -> a
let add_ = unapply(add);

add_(1, 2, 3); // ?

若想將原本 add() 的 argument 從 1 個 array,變成 3 個 argument,可使用 Ramda 的 unapply() 加以轉換。

unapply()
([*…] → a) → (*… → a)
使單一 argument function 成為多 argument function

([*…] → a):原本以 array 為單一 argument function

(*… → a):回傳多 argument function

unapply001

Conclusion

  • apply() 因為有 a,所以 argument 為 array;而 unapply() 因為沒有 a,所以 argument 不是 array,而是多 argument,這樣聯想可以幫助記憶
  • unapply() 並沒有提供 currying,須自行再使用 curry()

Reference

Ramda, unapply()