gpt4 book ai didi

javascript - Compose - 函数式编程

转载 作者:行者123 更新时间:2023-11-30 07:52:34 24 4
gpt4 key购买 nike

我想创建自己的 compose 实现

这行得通

const compose = (...fns) => fns.reduce((f,g) => (...args) => f(g(...args)));

这不是

const compose1 = (...fns) => (...args) => fns.reduce((f,g) => f(g(...args)));

.

const multi = a => x => x*a;
const devide = a => x => x/a;
const add = a => x => x+a;

compose(add(6), multi(4), devide(5))(5); // 10 as expected

compose1(add(6), multi(4), devide(5))(5); // Uncaught TypeError: f is not a function

你能解释一下为什么第二个实现不起作用吗?

最佳答案

const compose = (...fns) => {
console.log('function', fns);
return fns.reduce((f,g) => {
console.log('f and g' , f,g)
return (...args) => {
console.log('args is ' , args)
return f(g(...args));
}
})
};

// call with
compose(add(6), multi(4), devide(5))(5);

会产生

VM1239:2 function (3) [ƒ, ƒ, ƒ]
VM1239:4 f and g x => x+a x => x*a
VM1239:4 f and g (...args) => {
console.log('args is ' , args)
return f(g(...args));
} x => x/a
VM1239:6 args is [5]
VM1239:6 args is [1]
10

一切正常对你的 compose1

做同样的事情
const compose1 = (...fns) => {
console.log('functions ', fns)
return (...args) => {
console.log('args', args)
return fns.reduce((f,g) => {
console.log('f and g', f,g)
return f(g(...args))
})
}
};
//called with
compose1(add(6), multi(4), devide(5))(5)

会产生

VM1783:2 functions  (3) [ƒ, ƒ, ƒ]
0: x => x+a
1: x => x*a
2: x => x/a
VM1783:4 args [5]
VM1783:6 f and g x => x+a x => x*a
VM1783:6 f and g 26 x => x/a
VM1783:7 Uncaught TypeError: f is not a function
at fns.reduce (<anonymous>:7:14)
at Array.reduce (<anonymous>)
at args (<anonymous>:5:16)
at <anonymous>:1:38

所以你的 f 现在是 26,这不是一个函数 :)

解释:

you called 
f (g (...args))
f ( g ( 5 ) )
f ( 5 * a) // a is 4
f ( 20 )
16 + a // a is 6
26

关于javascript - Compose - 函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49520090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com