return sprite: myFunc
width: 79
height: 66
throw:
from: {}
last: {}
return {
sprite: myFunc({
width: 79,
height: 66
}),
"throw": {
from: {},
last: {}
}
};
return {
sprite: myFunc({
width: 79,
height: 66
})
};
({
"throw": {
from: {},
last: {}
}
});
这破坏了我的代码。我在版本之间的更改日志中看不到任何内容。这是一个错误吗?
答案 0 :(得分:3)
我称之为错误,但错误在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: {}
}
或更好(IMO):
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
时不存在的上下文。