【问题标题】:CoffeeScript parse error - Unexpected "(" - But there's no "(" in the codeCoffeeScript 解析错误 - 意外的“(” - 但代码中没有“(”
【发布时间】:2015-08-30 21:40:26
【问题描述】:

这是原始代码:

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

这是无效的。

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

【问题讨论】:

    标签: coffeescript


    【解决方案1】:

    我假设对象键中的字符串插值是有效的,但我不确定。

    不幸的是,它不是。

    你必须做类似的事情

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

    或者如果你想要单线

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

    至于误导性错误,CoffeeScript 正在尝试将您的 {"#{a}": ''} 转换为无效的 JavaScript 的 {("" + a): ""}。 CoffeeScript 在那个左括号抛出错误。

    【讨论】:

    • 谢谢。我在胡闹,意识到我错了。我仍然不明白为什么它声称我的代码中有一个“(”。如果没有人能回答我就接受这个作为答案。
    • 我已添加到我的答案中,请查看。
    • 有趣。所以 CoffeeScript 在编译成 JavaScript 之后 抛出错误?
    • 我不能肯定地说,因为我还没有真正深入研究解析器代码,但在某些时候会检查翻译代码的 JavaScript 语法正确性。据我所知,不可能将 CoffeeScript 编译成包含语法错误的 JavaScript。
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    相关资源
    最近更新 更多