通过管道传递多个参数和最后一个函数的结果
Passing multiple arguments and result of last function through pipe
我正在用 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]));
我能想到几个解决办法:
将你的管道包裹在另一个函数中,这样你组合中的函数仍然可以引用原始参数。
此处 func2
接受 func1
的输出,但也可以访问初始 b
参数。显然 func2
必须被柯里化并被设计为接受它的 "data" 作为最后一个参数(我会说这是 Ramda 和函数式编程的原则)。
const func3 = (a, b, c) =>
pipe(func1, func2(b))
(a, b, c);
func3(10, 20, 30);
其他选项,func1
returns 可以在 func2
中解构的数组。
我认为这不是特别好,但这是一个选择:
const func1 = (a, b, c) => [a + c, b];
const func2 = ([sum, b]) => sum * b;
const func3 = pipe(func1, func2);
func3(10, 20, 30);
我认为这里最简单的事情就是不要理会 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 使更长的管道更容易;即便如此,上面的函数可能更简单一些。
我正在用 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]));
我能想到几个解决办法:
将你的管道包裹在另一个函数中,这样你组合中的函数仍然可以引用原始参数。
此处 func2
接受 func1
的输出,但也可以访问初始 b
参数。显然 func2
必须被柯里化并被设计为接受它的 "data" 作为最后一个参数(我会说这是 Ramda 和函数式编程的原则)。
const func3 = (a, b, c) =>
pipe(func1, func2(b))
(a, b, c);
func3(10, 20, 30);
其他选项,func1
returns 可以在 func2
中解构的数组。
我认为这不是特别好,但这是一个选择:
const func1 = (a, b, c) => [a + c, b];
const func2 = ([sum, b]) => sum * b;
const func3 = pipe(func1, func2);
func3(10, 20, 30);
我认为这里最简单的事情就是不要理会 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 使更长的管道更容易;即便如此,上面的函数可能更简单一些。