我会称之为一个bug,但是这个bug是在1.1.1版本中,并且存在于你的代码中依赖于特定解释模糊代码的部分。具体来说:
return sprite: myFunc
width: 79
height: 66
throw:
from: {}
last: {}
在块throw
应该位于哪里可能有点模糊,但我认为1.3.3的解释是唯一有意义的:您的缩进与您的意图不匹配。
如果我们添加一个函数包装器以增加清晰度:
f = ->
return sprite: myFunc
width: 79
height: 66
throw:
from: {}
last: {}
那么,任何模棱两可的地方都消失了,1.3.3解释如下:
f = ->
return { sprite: myFunc(width: 79, height: 66) }
{ throw: { from: {}, last: {} } }
这句话很好理解,因为你的结构只是一个变体:
f = ->
return pancakes
eggs
即使括号和圆括号等是可选的,也不意味着它们被禁止使用。如果一段代码结构的意图不能一眼看出,那么您应该使用一些括号和圆括号来强制结构,例如:
return { sprite: myFunc
width: 79
height: 66
throw:
from: {}
last: {}
}
或者更好(在我看来):
return {
sprite: myFunc(
width: 79
height: 66
)
throw:
from: {}
last: {}
}
很不幸,您需要阅读所有的 CoffeeScript 代码,并根据需要添加大括号。我希望您有非常好的测试套件。
有趣的是,如果删除 return
:
sprite: myFunc
width: 79
height: 66
throw:
from: {}
last: {}
那么你将得到最新的解释:
{
sprite: myFunc(...)
throw: { from: ... }
}
对我来说这非常有意义,因为它看起来像:
v =
sprite: myFunc ...
throw: ...
明确使用return
会引入上下文,而在暗示情况下不存在上下文。
return
引入时上下文的变化。我认为在coffeescript中空格没有被充分考虑,添加括号对我来说似乎不是正确的答案,因为coffeescript易读性和编辑便捷性的关键之一就是不必匹配括号。 - Billy Moon