咖啡编译器的奇怪行为

时间:2012-10-04 11:04:32

标签: node.js coffeescript

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

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

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

我得到了:

  

SyntaxError:在repl中,不能在expression.at中使用纯语句语法错误(未知来源)......

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

var i, _i;

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

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

UPD

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

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

我发现了另一个奇怪的事情 - 只有当我使用'break'关键字时才会发生此错误。 [0..5]中i的表达式'(console.log i; i + 1)可以正常工作并返回一个数组。

1 个答案:

答案 0 :(得分:4)

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

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

会破坏编译器,因为您无法在列表推导中使用break

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