在 CoffeeScript 中,是否存在类似于 Haskell 的 $ 运算符的概念?我似乎在这个主题上找不到任何东西,但我相信我曾经在 GitHub 上看到过一个问题。
我想做的是写
foo = bar $ baz 1 2
代替
foo = bar (baz 1 2)
在 CoffeeScript 中,是否存在类似于 Haskell 的 $ 运算符的概念?我似乎在这个主题上找不到任何东西,但我相信我曾经在 GitHub 上看到过一个问题。
我想做的是写
foo = bar $ baz 1 2
代替
foo = bar (baz 1 2)
看来您可能对$
Haskell 中的具体功能有些困惑。
从它的类型可以看出——只“知道”两个参数。 (a -> b) -> a -> b
$
因此,在您的foo = bar $ baz 1 2
示例中,$
不“了解” baz 1 2
.
分组发生的原因是因为“函数应用程序比任何中缀运算符具有更高的优先级”(来源)。.
因此,例如,使用中缀运算符的相同表达式的解析方式完全相同:
foo = bar . baz 1 2 -- also parsed as `bar (baz 1 2)`
-- because of function application's high precedence
因此,唯一要做的$
就是接受两个参数并将第一个应用于第二个。只要 Coffeescript 允许高阶函数,实现$
. 您注意到的其余行为是 Haskell 语言的一部分。
阅读上面发布的 GitHub 问题,似乎已经对它进行了不止一次的激烈辩论。然而,没有结论,但似乎它不会被包括在内。
一个叫 alexkg的人在他自己的 CoffeeScript 分支中实现了这个功能,命名为 operator <-
。