2014-03-19 101 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() 
相關問題