私はそれをバグと呼びますが、バグは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