我最近在一次采访中遇到了一个问题,该问题使用JavaScript中的函数实现计算器,如下所示:
five(plus(one())); //returns 6
seven(minus(one())); // returns 6
我将如何实施?
答案 0 :(得分:4)
一种方法可能是创建一个函数getNumber(x)
,该函数将返回一个函数(称为 foo )。 Foo 接受运算符功能作为输入,并将运算符功能应用于x
。但是,在您的示例中,并非始终提供数字的运算符功能(例如:one()
),因此,在这种情况下,运算符功能将默认为identity function,它将如果未提供运算符,则返回数字x
(例如:one()
需要返回1
)。
您还可以创建函数setOperator
,在其中可以为两个数字(x
和y
)提供运算符,然后在调用数字函数的结果中调用该函数。运算符函数接受y
,然后返回一个新函数,该函数接受x
。通过使用函数(例如:five(plus(one()))
)可以看到,one()
首先提供给运算符,然后在调用我们的 foo 5 >函数,因此,我们需要先接受y
,然后接受x
。
请参见以下示例:
const getNumber = x => (f = x => x) => f(x);
const setOperator = f => y => x => f(x, y);
const five = getNumber(5);
const one = getNumber(1);
const seven = getNumber(7);
const plus = setOperator((x, y) => x+y);
const minus = setOperator((x, y) => x-y);
console.log(five(plus(one()))); // 6
console.log(seven(minus(one()))); // 6