Mar*_*ova 11 javascript functional-programming infix-operator coffeescript
是否可以在CoffeeScript(或纯JavaScript)中定义自己的中缀函数/运算符?我想打电话
a foo b
Run Code Online (Sandbox Code Playgroud)
要么
a `foo` b
Run Code Online (Sandbox Code Playgroud)
代替
a.foo b
Run Code Online (Sandbox Code Playgroud)
或者,当foo是全局函数时,
foo a, b
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
okd*_*wit 19
ES6支持非常Haskell/Lambda演算的方式.
给定乘法函数:
const multiply = a => b => (a * b)
Run Code Online (Sandbox Code Playgroud)
您可以使用部分应用程序定义加倍函数(省略一个参数):
const double = multiply (2)
Run Code Online (Sandbox Code Playgroud)
你可以自己组合双重功能,创建一个四重功能:
const compose = (f, g) => x => f(g(x))
const quadruple = compose (double, double)
Run Code Online (Sandbox Code Playgroud)
但实际上,如果你更喜欢中缀符号怎么办?正如Steve Ladavich指出的那样,你需要扩展原型.
但我认为使用数组符号而不是点符号可以做得更优雅.
让我们使用函数组成"∘"的官方符号:
Function.prototype['?'] = function(f){
return x => this(f(x))
}
const multiply = a => b => (a * b)
const double = multiply (2)
const doublethreetimes = (double) ['?'] (double) ['?'] (double)
console.log(doublethreetimes(3));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4442 次 |
| 最近记录: |