我是CoffeeScript的初学者。
的输出的.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
答案 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 object
→console.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看看输出是否相同。