CoffeeScript 如何决定函数参数优先级?

发布于 2024-12-11 16:41:02 字数 398 浏览 0 评论 0原文

假设我们有 3 个函数:times、plus 和 minus。他们按照他们的名字所暗示的去做。然后,我们在 JavaScript 中创建以下行:

times(plus(1,2) ,minus(5,2));

当用 CoffeeScript 编写时,它是:

times plus 1,2 , minus 5,2

编译为 JavaScript 后,它变成:

(function() {
  times(plus(1, 2, minus(5, 2)));
}).call(this);

这不是我们想要的。有没有 CoffeeScript 方法来解决这个问题,或者我们必须使用括号?谢谢,

Suppose we have 3 functions: times, plus and minus. They do what their name suggest. We then create the following line in JavaScript:

times(plus(1,2) ,minus(5,2));

When written in CoffeeScript, it's:

times plus 1,2 , minus 5,2

And after compiled to JavaScript, it becomes:

(function() {
  times(plus(1, 2, minus(5, 2)));
}).call(this);

Which is not what we want. Is there a CoffeeScript way to solve this or we have to use brackets? Thanks,

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

红尘作伴 2024-12-18 16:41:02

正如我在我的书中解释的那样,编译器无法知道您要对隐式括号使用什么规则。当然,在这种情况下,

times plus 1,2, minus 5,2

对于人类来说,你想要它的意思是显而易见的,

times(plus(1,2), minus(5,2))

但你也可能会编写

times 5, plus 1, parseInt str, 10

并期望它被理解为(按原样)

times(5, plus(1, parseInt(str, 10))

CoffeeScript 隐式括号的规则非常简单:它们到最后的表达式。因此,例如,您始终可以将 Math.floor 粘贴在数学表达式前面。

作为一种风格问题,我通常只在一行中的第一个函数调用时省略括号,从而避免任何潜在的混淆。这意味着我会把你的例子写成

times plus(1,2), minus(5,2)

“不错”,对吧?

As I explain in my book, there's no way for the compiler to know what rule you want to use for implicit parentheses. Sure, in the case

times plus 1,2, minus 5,2

it's obvious to a human that you'd want it to mean

times(plus(1,2), minus(5,2))

But you might also write

times 5, plus 1, parseInt str, 10

and expect it to be understood (as it is) as

times(5, plus(1, parseInt(str, 10))

The rule for CoffeeScript's implicit parentheses is very simple: They go to the end of the expression. So, for instance, you can always stick Math.floor in front of a mathematical expression.

As a stylistic matter, I generally only omit parens for the first function call on a line, thus avoiding any potential confusion. That means I'd write your example as

times plus(1,2), minus(5,2)

Not bad, right?

温暖的光 2024-12-18 16:41:02

作为“常规”函数调用括号的替代方案,您可以对函数call使用无括号样式,并仅针对优先级使用括号,例如:

times (plus 1, 2), (minus 5, 2)

当然,这只是一个品味问题; times plus(1, 2), minus(5, 2) 版本也同样有效。

As an alternative to the "regular" function-call parens, you can use the paren-less style for the function call and parens only for precedence, such as:

times (plus 1, 2), (minus 5, 2)

Of course, it's only a matter of taste; the times plus(1, 2), minus(5, 2) version works just as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文