2015-07-13 59 views
1

我在CoffeeScript中這樣寫:CoffeeScript重新安排方法調用括號,爲什麼?

expect (@controllerInstance[fn]).toHaveBeenCalled()

和它編譯成這樣:

return expect(this.controllerInstance[fn].toHaveBeenCalled());

爲什麼會重新排列的方法調用括號?我如何將它編譯成我想要的?

什麼,我需要看到的是:

expect(this.controllerInstance[fn]).toHaveBeenCalled()

回答

2

括號中的CoffeeScript服務於兩個目的:

  1. 表達分組,例如(6 + 11) * 23f (-> 6), (-> 11)。函數調用,例如f()g('pancakes')

由於括號有時在函數調用可選,存在一些不確定性:

f (expr) 

被用來調用fexpr作爲參數的括號或者圓括號真正的一部分f的論點? CoffeeScript選擇後一種解釋。

你會看到類似的問題,如果寫:

f (x) + 1 

CoffeeScript中看到,作爲:

f((x) + 1) 

同樣,如果你寫:

f (x, y) 

你會得到一個unexpected ,錯誤; CoffeeScript沒有逗號運算符,因此x, y不是有效的表達式。

您可以通過左括號之前刪除空格消除不確定性:

expect(@controllerInstance[fn]).toHaveBeenCalled() 

expect力的CoffeeScript卸下空間查看周圍@controllerInstance[fn]括號被視爲函數調用括號。

相關問題