【问题标题】:Strange behavior of coffee compiler咖啡编译器的奇怪行为
【发布时间】:2012-10-05 01:35:46
【问题描述】:

我发现 coffee 编译器在一个简单表达式上的奇怪行为,这与 coffeescript.org 网站上的交互式编译器反应不同。

当我尝试用咖啡编译下一个字符串时:

(console.log i; break) for i in [0..10]

我明白了:

SyntaxError: In repl, cannot use a pure statement in an expression.at SyntaxError (unknown source) ...

但是 coffescript.org 的交互式编译器中的相同表达式编译得很好,正如我所期望的那样:

var i, _i;

for (i = _i = 0; _i <= 10; i = ++_i) {
  console.log(i);
  break;
}

为什么咖啡不喜欢这里的 () 分组?

UPD

另一件奇怪的事情 - 它并不总是发生,有时,经过大量尝试和变化后,coffee 开始正常编译完全相同的表达式,没有错误。

但似乎在交互模式下,咖啡总是失败。

我发现了另一个奇怪的事情——这个错误只在我使用'break'关键字时发生。表达式 '(console.log i; i+1) for i in [0..5]' 工作正常并返回一个数组。

【问题讨论】:

    标签: node.js coffeescript


    【解决方案1】:

    问题在于 REPL 试图为您提供每个表达式的结果(并将其保存为 _)。所以在内部,它正在编译

    _ = ((console.log i; break) for i in [0..10])
    

    这会破坏编译器,因为您不能在列表理解中使用 break

    我建议在您喜欢的编辑器中创建 myfile.coffee 并运行它 (coffee myfile.coffee) 而不是使用 REPL。

    【讨论】:

    • 感谢您的详细描述!但是有一件事 - 我在 *.coffee 脚本编译期间遇到了这个错误,它并不总是发生相同的表达式,有时编译正常,有时不是。第一次遇到它时,我花了很多时间在我的代码中搜索它发生的地方,因为消息没有行号。
    猜你喜欢
    • 2011-06-30
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多