0

私は CoffeeScript が初めてで、その構文を理解するのに苦労しています。

たとえば、次の関数呼び出しでは:

e('')
    .color('rgb(255,0,0)')
    .attr( x: 20,
           y: 100,
           w: 10,
           h: 100 )

これにより、キー x、y、w、h を持つオブジェクトをattrメソッドに渡す JS コードがコンパイルされることを期待しています。しかし、このコードは実際には次のようにコンパイルされます。

e('').color('rgb(255,0,0)').attr({
  x: 20
}, {
  y: 100,
  w: 10,
  h: 100
});

2 つのオブジェクトを に渡していますattr。最初は keyxで、2 番目は key yw、およびhです。x が他のキーから分離されているのに、他のキーが分離されていない理由がわかりません。

attrメソッドに1つのオブジェクトを渡したいので、これを試しました:

e('')
    .color('rgb(255,0,0)')
    .attr({x: 20,
           y: 100,
           w: 10,
           h: 100})

y: 100しかし、これにより、 place:を取得する行でコンパイルエラーが発生しますError: Parse error on line 4: Unexpected '{'。奇妙なことに、{4行目にはありません。括弧を削除しようとしましattrたが、それでも同じエラーが発生しました。

私はこれでそれを解決できます:

e('')
    .color('rgb(255,0,0)')
    .attr(
           x: 20,
           y: 100,
           w: 10,
           h: 100)

の後に改行を削除する.attr(と、最初の例で同じコードが得られますが、これは私が望むものではありません。

今、CoffeeScript 構文のいくつかの点を誤解しているのか、それとも本当に奇妙なものが含まれているのか疑問に思っています。または、CoffeeScript のバグを見つけましたか? 何か案は?

私はCoffeeScript 1.3.1を使用しています

4

3 に答える 3

3

coffeescript では空白が重要です。あるべきだと思った場所に並べることはできません。次のようなことを試してください:

e('')
  .color('rgb(255,0,0)')
  .attr(
    x: 20
    y: 100
    w: 10
    h: 100
  )

編集:メソッド呼び出しと同じ行に x を配置したい場合は、適切にインデントする必要があります:

e('')
    .color('rgb(255,0,0)')
    .attr(x: 20,
    y: 100,
    w: 10,
    h: 100)
于 2012-04-26T19:44:31.743 に答える
1

これはあなたが探しているものです:

e('')
  .color('rgb(255,0,0)')
  .attr
    x:20
    y:100
    w:10
    h:100

これは次のようにコンパイルされます:

e('').color('rgb(255,0,0)').attr({
  x: 20,
  y: 100,
  w: 10,
  h: 100
});

覚えておいてください、CoffeeScript はシンプルさがすべてであり、中括弧とコンマを避けます...

于 2012-04-26T20:08:27.170 に答える
0

明らかな解決策は、オブジェクトを のように 1 行に配置すること.attr({x: 20, y: 100, w: 10, h: 100})です。(ただし、テストしていませんが、なぜ機能しないのかわかりません)。

ブラケットを使用できない場合もありますが、読みやすいので、関数呼び出しで使用することを好みます。

于 2012-04-26T19:37:38.717 に答える