用于使用参数调用对象方法的 Ramda 函数?

Ramda function for calling an object's method with arguments?

Ramda.js是否有可用于调用对象方法的函数?基本上等同于此:

(methodName, argumentList) => o => o[methodName].apply(o, argumentList);

我已经仔细查看了函数列表几次,但没有发现似乎可以执行此操作的任何内容。

您可以使用 R.invoker 和 R.apply 来获得您想要的。但是,如您所见,它有点笨拙且可读性差:

const { curry, apply, invoker, length } = R

const fn = curry((methodName, argumentList) =>
  apply(invoker(length(argumentList), methodName))(argumentList)
)

const slice = fn('slice', [1, 4])

const result = slice('abcdefghijklm')

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>

使用 Spread 的 Vanilla JS,函数变得更简单,更具可读性:

const fn = (methodName, argumentList) => o => o[methodName](...argumentList)

const slice = fn('slice', [1, 4])

const result = slice('abcdefghijklm')

console.log(result);

你也可以咖喱香草函数:

const fn = R.curry((methodName, argumentList, o) => o[methodName](...argumentList))

const slice = fn('slice', [1, 4])

const result = slice('abcdefghijklm')

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js"></script>