我在一个简单的表达式上发现了 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)可以正常工作并返回一个数组。
答案 0 :(得分:4)
问题是REPL试图给你每个表达式的结果(并将其保存为_
)。所以在内部,它正在编译
_ = ((console.log i; break) for i in [0..10])
会破坏编译器,因为您无法在列表推导中使用break
。
我建议您在自己喜欢的编辑器中创建myfile.coffee
并运行它(coffee myfile.coffee
)而不是使用REPL。