我在CoffeeScript中写过:
expect (@controllerInstance[fn]).toHaveBeenCalled()
并且已编译为:
return expect(this.controllerInstance[fn].toHaveBeenCalled());
为什么重新安排方法调用括号?我怎么能把它编译成我想要的呢?
我需要看到的是:
expect(this.controllerInstance[fn]).toHaveBeenCalled()
答案 0 :(得分:2)
圆括号在CoffeeScript中有两个用途:
(6 + 11) * 23
或f (-> 6), (-> 11)
。f()
,g('pancakes')
。由于括号在函数调用中有时是可选的,因此存在一些歧义:
f (expr)
这些括号是否用于以f
作为参数调用expr
,或者括号是f
参数的一部分? CoffeeScript选择后者的解释。
如果写:
,你会看到类似的问题f (x) + 1
CoffeeScript将其视为:
f((x) + 1)
同样,如果你写:
f (x, y)
你会收到unexpected ,
错误; CoffeeScript没有逗号运算符,因此x, y
不是有效的表达式。
您可以通过删除左括号前的空格来消除歧义:
expect(@controllerInstance[fn]).toHaveBeenCalled()
在expect
强制CoffeeScript查看@controllerInstance[fn]
周围的括号后,删除空格,以便将其视为函数调用括号。