CoffeeScript解析错误 - 意外“(” - 但代码中没有“(”)

时间:2012-09-21 17:10:49

标签: coffeescript

这是原始代码:

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"}

无效。

但有人可以解释为什么它给我的错误信息是错误的吗?

1 个答案:

答案 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将错误抛给了那个左边的人。