这是原始代码:
res.write JSON.stringify {"#{result.statusCode}": "OK"}
这是错误,因为SublimeText 2中的CoffeeScript linter和CoffeeScript网站上的“Try CoffeeScript”解释器都给了我:
PARSE ERROR ON LINE 1: UNEXPECTED '('
显然代码中没有开放的parens,所以我不明白错误。它是CoffeeScript解析器中的错误吗?
执行此操作的最小代码行似乎是这样的:
{"#{a}": ""}
我假设对象密钥中的字符串插值有效,但我不确定。
编辑: 经过一些调查后,似乎在密钥中进行字符串插值是无效的,因为生成的JavaScript无效。
此:
{"#{a}": "stuff}
会转换为:
{ "" + a: "stuff"}
无效。
但有人可以解释为什么它给我的错误信息是错误的吗?
答案 0 :(得分: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将错误抛给了那个左边的人。