2

coffeescript.org サイトの対話型コンパイラーの反応とは異なる、単純な式でのcoffeeコンパイラーの奇妙な動作を見つけました。

次の文字列をコーヒーでコンパイルしようとすると:

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

私が得た:

SyntaxError: repl では、式で純粋なステートメントを使用できません。at SyntaxError (不明なソース) ...

しかし、coffescript.org の対話型コンパイラの同じ式は、私が期待していたように、うまくコンパイルされました。

var i, _i;

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

コーヒーが () グループ化を好まないのはなぜですか?

UPD

別の奇妙なこと - 常に起こるとは限らず、多くの試行とバリエーションの後、コーヒーはエラーなしでまったく同じ式を正常にコンパイルし始めます。

しかし、インタラクティブモードでは、コーヒーは常に失敗するようです。

私が見つけた別の奇妙なこと - このエラーは、'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リスト内包表記で使用できないため、コンパイラが壊れます。

REPL を使用するよりもmyfile.coffee、お気に入りのエディターで作成して実行することをお勧めします ( )。coffee myfile.coffee

于 2012-10-04T17:35:46.827 に答える