1

这是原始代码:

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

这是 SublimeText 2 中的 CoffeeScript linter 和 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 正在尝试将您的JavaScript{"#{a}": ''}转换{("" + a): ""}为无效的 JavaScript。CoffeeScript 在那个左括号抛出错误。

于 2012-09-21T17:12:05.117 回答