2014-03-19 64 views
1

我是一个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 
+1

我的猜测(也是coffeejs的新手)是它与参数的数量和/或类型有关。注意在前两种情况下你只有一个参数,而在第二种情况下你有两个,其中一个是对象?对于方法的返回,你正在做什么似乎也很重要。 'var foo = foo.bar(...'vs'foo.bar(...' –

+1

是关于j2coffee还是关于CoffeeScript的问题? –

+0

@Michael_Scharf CoffeeScript – alexchenco

回答

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)) 

问题

Q :为什么CoffeeScript在下列情况下需要括号?

答:它不

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

答:像参数换行符是提高可读性另一种方式,在本例中,你提供的,因为有一些复杂的论据js2coffee是足够的智慧,建议使用换行符。

你可以test this并看到输出将是相同的。

3

在CoffeeScript中可以忽略括号中的所有情况:

prevPost = Posts.findOne position: @position - 1 

@Posts = new Meteor.Collection "posts" 

我认为这是如果你放弃父母,这是一种风格问题ESIS。

如果您处于忽略括号的“心情”,请注意,如果没有参数,则不能省略它们。

这将分配富吧

bar = foo 

这将分配函数foo的返回值吧:

bar = foo() 
相关问题