なぜ coffeescript はオブジェクトキーを返さず、代わりに x の値を文字列 'x' として扱いますか?
coffee> a = { test: '0', super: '1' }
coffee> x for x,y of a
[ 'test', 'super' ]
coffee> {x:y} for x,y of a
[ { x: '0' }, { x: '1' } ]
なぜ coffeescript はオブジェクトキーを返さず、代わりに x の値を文字列 'x' として扱いますか?
coffee> a = { test: '0', super: '1' }
coffee> x for x,y of a
[ 'test', 'super' ]
coffee> {x:y} for x,y of a
[ { x: '0' }, { x: '1' } ]
これが、 CoffeeScript オブジェクト リテラル構文が機能する方法だからです。希望どおりに機能したとします。どこかで次のように言ったらどうなるでしょうか。
window.test = 'pancakes'
それは、test
全員の範囲の変数にすぎず、突然、次のa
ようになります。
a = { 'pancakes': '0', super: '1' }
そして、あなたのコンピュータがどんなナンセンスなことをしようとしているのか疑問に思うでしょう。したがって、プロパティ名が引用符のない文字列ではなく変数として評価された場合、次のような醜いものを書くことになります。
a = { 'test': '0', 'super': '1' }
予測可能で一貫した結果を得るためだけに。
あなたが望むものを得る最も簡単な方法は、小さな機能を追加することだと思います:
objectify = (k, v) ->
o = { }
o[k] = v
o
次に、次のことができます。
a = (objectify(x, y) for x, y of o)