1

元のコードは次のとおりです。

res.write JSON.stringify {"#{result.statusCode}": "OK"}

そして、SublimeText 2 の CoffeeScript リンターと CoffeeScript サイトの "Try CoffeeScript" インタープリターの両方が私に与えるエラーは次のとおりです。

PARSE ERROR ON LINE 1: UNEXPECTED '('

明らかにコードに開き括弧がないため、エラーがわかりません。CoffeeScript パーサーのバグですか?

これを行う最小のコード行は次のようになります。

{"#{a}": ""}

オブジェクトのキーの文字列補間が有効であると想定していますが、確かなことはわかりません。

編集: いくつかの調査の後、結果の JavaScript が無効になるため、キーで文字列補間を行うことは有効ではないようです。

これ:

{"#{a}": "stuff}

次のように変換されます。

{ "" + a: "stuff"}

これは有効ではありません。

しかし、それが私に与えるエラーメッセージがなぜそんなに間違っているのか誰かが説明できますか?

4

1 に答える 1

3

オブジェクトのキーの文字列補間は有効だと思いますが、よくわかりません。

残念ながらそうではありません。

あなたは次のようなことをしなければならないでしょう

(json = {})[result.statusCode] = 'OK'
res.write JSON.stringify json

またはワンライナーが必要な場合

res.write (-> ((json = {})[result.statusCode] = 'OK') and JSON.stringify json)()

誤解を招くエラーに関しては、CoffeeScriptはあなた{"#{a}": ''}{("" + a): ""}有効なJavaScriptに変換しようとしています。CoffeeScriptはその左の親にエラーをスローしています。

于 2012-09-21T17:12:05.117 に答える