Есть несколько способов добиться этого.
R.converge, что трубы данного значения через каждую функцию в указанном списке перед использованием результата каждого как соответствующий аргумент позиция функции, представленной в качестве первого аргумента converge
- может быть, объяснен лучше с диаграммой:
add = (a, b) => a + b
incr = a => a + 1
decr = a => a - a
double = converge(add, [incr, decr])
------ ---
5 ----| incr |- 6 -| a |
\ ------ | d |- 10
\-| decr |- 4 -| d |
------ ---
Это может быть использовано для имитации нечто похожее на juxt
следующим образом:
var argsId = R.unapply(R.identity);
var juxt = R.converge(argsId);
var addSubtract10 = juxt([R.add(10), R.subtract(10)]);
addSubtract10(5); //=> [15, 5]
в качестве альтернативы (хотя, возможно, менее интуитивное), R.commute также можно использовать над списком функций. R.commute
берет список некоторых аппликативных типов и эффективно превращает его наизнанку, чтобы стать аппликативным некоторым списком, где аппликативное поведение функций, предоставляемых Ramda, похоже на converge
.
var juxt = R.commute(R.always);
var addSubtract10 = juxt([R.add(10), R.subtract(10)]);
addSubtract10(5); //=> [15, 5]
'R.ap()'? ........ – zerkms
@zerkms - обертывание функций в массиве, а коллекция в массиве обеспечивает ту же функциональность! Вы должны сказать это как ответ. –