2012-02-02 9 views
2

各一致する値に対して関数を呼び出すのではなく、値の配列を取得したいのですが、['broccoli', 'spinach']ですが、コンパイラーエラーが発生しています。誰かが私が誤解していることを説明できますか?どのようにして理解の結果をCoffeeScriptの配列に集めますか?

# Health conscious meal. - This example is from http://coffeescript.org/#loops 
foods = ['broccoli', 'spinach', 'chocolate'] 
eat food for food in foods when food isnt 'chocolate' 

# Failed Attempt #1 - Unexpected TERMINATOR 
arr = for food in foods when food isnt 'chocolate' 

# Failed Attempt #2 - Unexpected ')' 
arr = (for food in foods when food isnt 'chocolate') 

答えて

6

あなたは理解を返すことを想定している値不足している(オリジナルではeat foodですが、foodをそのまま返すようにしたいです)。だから、代わりに:

for food in foods when food isnt 'chocolate' 

あなたが欲しい:

food for food in foods when food isnt 'chocolate' 

(。あなたは、現代のJavaScriptの実装をターゲットにしている場合、それはおそらくfoods.filter (food) -> food isnt 'chocolate'のようなものを使用するだけで、より読みやすいでしょうけど)

+0

感謝、 'arr =(食べ物が食べ物を食べない時に食べ物を食べる食べ物 'チョコレート)'が働いています。かっこが必要です。 – davidzarlengo

+1

@davidzarlengo:ええ、申し訳ありませんが、私はそれを言及すべきでした。通常は納得する必要があります。括弧がなければ、パーサーはそれを「食べ物が食べていないときには食べ物のために食べる」と読む。 – Chuck

関連する問題