2

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

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

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

我有:

SyntaxError:在 repl 中,不能在表达式中使用纯语句。在 SyntaxError(未知来源)...

但是 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]' 工作得很好并返回一个数组。

4

1 回答 1

4

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

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

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

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

于 2012-10-04T17:35:46.827 回答