在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
。
对我来说,这是一种更具表达性的方法,用于编写代码,并具有运行时效率或至少避免了不必要的运行时负担。为什么我不想避免函数调用的开销?
这并不意味着我没有接受您的建议。亲爱的陌生人,我实际上有:)但是,如果有解决方法,尤其是我,我也希望我的代码运行得更快。当涉及到内循环时。
答案 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
函数。