Javascript中是否有等效的构造。如果没有,你会如何创建一个?
以下是对中缀运算符在Haskell中所做的简单解释:
答案 0 :(得分:4)
JavaScript没有列表类型,但它有Array
s。
你可以使用......
var newArr = [val].concat(arr);
或者,您可以使用unshift()
作为数组的前置,但它会改变原始数据。
JavaScript没有:
运算符,运算符重载或类似于运算符的方法,因此您无法获得与Haskell类似的语法。
答案 1 :(得分:2)
我看到Leila Hamon已经与this article on emulating infix operators in JS挂钩了。
但我认为一个例子可能对其他人有用。
以下是如何破解Number
和Boolean
原型来处理链接的中缀表达式,例如4 < 5 < 10
。
您可以通过将更多方法应用于更多原型来进一步扩展这一点。它有点丑陋,但可能有助于使查询更简洁。
//Usage code
(4) .gt (6) .gt (4) //false
(100) .lt (200) .lt (400) . gt(0) . gt(-1)//true
(100) [ '>' ] (50) [ '<' ] (20)//false
//Setup Code
(function(){
var lastVal = null;
var nP = Number.prototype
var bP = Boolean.prototype
nP.gt = function(other){
lastVal = other;
return this > other;
}
nP.lt = function(other){
lastVal = other;
return this < other;
}
bP.gt = function(other){
var result = lastVal > other;
lastVal = other;
return result;
}
bP.lt = function(other){
var result = lastVal < other;
lastVal = other;
return result;
}
bP['<'] = bP.lt
bP['>'] = bP.gt
nP['<'] = nP.lt
nP['>'] = nP.gt
})()
答案 2 :(得分:0)
这不是最漂亮的,但它可能有助于你想要中缀的地方的可读性,所以你的代码读起来像散文
function nfx(firstArg, fn, secondArg){
return fn(firstArg, secondArg);
}
// Usage
function plus(firstArg, secondArg) {
return firstArg + secondArg;
}
nfx(1, plus, 2);