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

问题描述 投票:0回答:1

Ramda.js有没有一个函数可以用来调用一个对象的方法?基本上相当于这个。

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

我在函数列表里找了好几遍 也没有找到任何可以这样做的函数。

javascript ramda.js
1个回答
2
投票

你可以使用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>

使用香草JS的spread,功能变得更简单,更易读。

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>
© www.soinside.com 2019 - 2024. All rights reserved.