为什么CoffeeScript在以下情况下需要括号?

时间:2014-03-19 14:12:10

标签: javascript coffeescript

我是CoffeeScript的初学者。

这是来自:http://js2coffee.org/

的输出

的.js:

var prevPost = Posts.findOne({position: this.position - 1});

.coffee:

prevPost = Posts.findOne(position: @position - 1)

的.js:

Posts = new Meteor.Collection('posts');

.coffee:

@Posts = new Meteor.Collection("posts")

为什么不在这里括号?

的.js:

Posts.update(nextPost._id, {$set: {position: nextPost.position - 1}});

.coffee:

Posts.update nextPost._id,
    $set:
      position: nextPost.position - 1

2 个答案:

答案 0 :(得分:3)

在CoffeeScript中,您可以在所有情况下省略括号:

prevPost = Posts.findOne position: @position - 1

@Posts = new Meteor.Collection "posts"

如果你放弃括号,我认为这是一个风格问题。

如果你处于"心情"省略括号,请注意在没有参数时不能省略它们。

这会将foo指定为bar

bar = foo

这会将函数foo的返回值赋给bar:

bar = foo()

答案 1 :(得分:1)

语言

Coffeescript documentation提供了有关此问题的良好见解:

  

如果您要传递参数,不需要使用括号来调用函数。隐式调用包装到行或块表达式的末尾。

console.log sys.inspect objectconsole.log(sys.inspect(object));

风格

polarmobile/coffeescript-style-guide您可以看到有关使用括号的原因和时间的更多定义:

  

调用函数时,选择以优化可读性的方式省略或包括括号。记住"可读性"可以是主观的,下面的例子说明了一些情况,其中括号被省略或以社区认为最佳的方式包括在内:

baz 12

brush.ellipse x: 10, y: 20 # Braces can also be omitted or included for readability

foo(4).bar(8)

obj.value(10, 20) / obj.value(20, 10)

print inspect value

new Tag(new Value(a, b), new Arg(c))

问题

问:为什么CoffeeScript在以下情况下需要括号?

答:它没有

问:为什么不在这里括号?

A:类似参数换行符是提高可读性的另一种方法,在您提供的示例中,因为参数中存在一些复杂性js2coffee是明智地建议使用换行符。

你可以test this看看输出是否相同。