我正在使用Ramda.js构建一个管道,该管道接受三个参数。第一个函数需要这三个参数,其结果将在第二个函数中使用。但是,第二个函数也需要初始参数之一。我不知道要建立类似的分支。
在伪代码样式中,我需要这样的东西:
const composedFunction = R.pipe(
firstFunction,
secondFunction,
);
const firstFunction = (reusedArgument, secondArgument, thirdArgument) => someAnswer;
const secondFunction = (reusedArgument, someAnswer);
console.log(composedFunction({ foo: bar }, [5, 3, 4], [100, 12, 12]));
答案 0 :(得分:3)
我可以想到一些解决方案:
将管道包装在另一个函数中,以便合成中的函数仍可以引用原始参数。
此处func2
接受func1
的输出,但也可以访问初始的b
参数。显然,func2
必须经过精心设计,并且必须接受其“数据”作为最后一个参数(这是我通常会说的Ramda和函数式编程的宗旨)。
const func3 = (a, b, c) =>
pipe(func1, func2(b))
(a, b, c);
func3(10, 20, 30);
其他选项func1
返回一个数组,您可以在func2
中对其进行分解。
我认为这不是特别好,但这是一种选择:
const func1 = (a, b, c) => [a + c, b];
const func2 = ([sum, b]) => sum * b;
const func3 = pipe(func1, func2);
func3(10, 20, 30);
答案 1 :(得分:1)
我认为这里最简单的事情是不用理会Ramda的pipe
函数,该函数并非旨在处理这种情况,而只是手动编写:
const func1 = (a, b, c) => `func1 (${a}, ${b}, ${c})`
const func2 = (a, d) => `func2 (${a}, ${d})`
const func3 = (a, b, c) => func2 (func1 (a, b, c), a)
console .log (func3 ('a', 'b', 'c'))
Ramda最近成为considering a way的代名词,以使其更容易用于较长的管道;即使这样,上面的功能可能仅适用于一些功能。