用于使用参数调用对象方法的 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>
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>