如何在javascript中将算术运算符作为函数访问?

时间:2018-12-17 19:20:23

标签: javascript

javascript中写类似以下内容的惯用方式是什么:

# in python
import operator
def foo(f, a, b): return f(a,b)

foo(operator.add, 2, 3) # returns 5
foo(operator.mul, 2, 3) # returns 6

-编辑

我对名称“ add”,“ mult”等没有特别的偏好。例如,在R中,有一个普通的香草反引号运算符可用于获取基元。在此之前,sh

对我来说,这是一种更具表达性的方法,用于编写代码,并具有运行时效率或至少避免了不必要的运行时负担。为什么我不想避免函数调用的开销?

这并不意味着我没有接受您的建议。亲爱的陌生人,我实际上有:)但是,如果有解决方法,尤其是我,我也希望我的代码运行得更快。当涉及到内循环时。

4 个答案:

答案 0 :(得分:2)

JavaScript中没有operator的等效项,并且您无法像在Python中那样重载javascript中的运算符。函数仍然是一流的对象,因此您可以创建类似于您发布的函数的函数。您只需要创建自己的add mul,等等:

let operator = {
    add(a, b) {return a + b},
    mul(a, b) {return a * b}
}

const foo = (f, a, b) => f(a,b)

console.log(foo(operator.add, 2, 3)) // returns 5
console.log(foo(operator.mul, 2, 3)) // returns 6

答案 1 :(得分:0)

在JavaScript中,您只能创建可重用的函数,这些函数会为您返回算术计算。

例如如果要添加功能,则可以创建一个可重复使用的功能,如下所示:

function add(a,b) {
    return a + b;
}

对于其他类型的算术计算,同样的方法也适用:

function mult(a,b) {
    return a * b;
}
function subtr(a,b) {
    return a - b;
}
function divd(a,b) {
    return a / b;
}

然后可以使用参数调用此可重用函数,它将返回参数的计算结果。

add(25, 75); // will return 100
subtr(76, 64); // will return 12
mult(15, 20); // will return 300
divd(300, 60); // will return 5

对于其他任何类型的算术计算,您也可以使用与上述相同的方法。

答案 2 :(得分:0)

var operator = {
  add: function(a, b) { return a + b; },
  mul: function(a, b) { return a * b; }
};

var foo = function(f, a, b) { return f(a, b) };

然后您可以执行以下操作:

console.log(foo(operator.add, 1, 2)); // 3

答案 3 :(得分:-1)

您可以编写自己的add函数,该函数需要任意数量的运算符,然后像python一样将函子传递给foo函数。