Hier ist der Originalcode:
res.write JSON.stringify {"#{result.statusCode}": "OK"}
und hier ist der Fehler, den sowohl der CoffeeScript-Interpreter in SublimeText 2 als auch der Interpreter "Try CoffeeScript" auf der CoffeeScript-Site geben:
PARSE ERROR ON LINE 1: UNEXPECTED "("
Offensichtlich gibt es keine offenen Parens im Code, daher verstehe ich den Fehler nicht. Ist es ein Fehler im CoffeeScript-Parser?
Die kleinste Codezeile, die dies tut, scheint ungefähr so zu sein:
{"#{a}": ""}
Ich gehe davon aus, dass die Zeichenketteninterpolation im Objektschlüssel gültig ist, aber ich weiß es nicht genau.
BEARBEITEN: Nach einigen Untersuchungen scheint es nicht zulässig zu sein, die Zeichenfolgeninterpolation im Schlüssel auszuführen, da das resultierende JavaScript ungültig wäre.
Dies:
{"#{a}": "stuff}
würde zu etwas übersetzen:
{ "" + a: "stuff"}
was nicht gültig ist.
Aber kann jemand erklären, warum die Fehlermeldung, die es mir gibt, so falsch ist?
Antworten:
3 für die Antwort № 1Ich gehe davon aus, dass die Zeichenketteninterpolation im Objektschlüssel gültig ist, aber ich weiß es nicht genau.
Leider ist es nicht so.
Sie müssen so etwas tun
(json = {})[result.statusCode] = "OK"
res.write JSON.stringify json
oder wenn Sie einen Einzeiler wünschen
res.write (-> ((json = {})[result.statusCode] = "OK") and JSON.stringify json)()
Was den irreführenden Fehler anbelangt, versucht CoffeeScript, Ihre {"#{a}": ""}
in {("" + a): ""}
Welches ist kein gültiges JavaScript. CoffeeScript wirft den Fehler bei diesem linken Elternteil.