2012-06-28 1 views
5

私はCoffeeScriptの次の行を持っている:この行CoffeeScriptでリストの内容をどのようにインデントするのですか?

names = (mail.folder for mail in @data when mail.service_name is service.name).unique() 

は長すぎるので、CoffeeLintによってリンティングを渡しません。

私はそれを打破しようとしていますが、私はいつもインデントエラーをCoffeeLintで取得します。

これを字下げする適切な方法は何ですか?どうやら複数行にわたる分裂リスト内包が許可されていない

答えて

5

names = (mail.folder for mail in @data \ 
     when mail.service_name is service.name).unique() 

あなたはまたfor ... whenと表現を反転することができます

これは、過度に長い取得せずにその最も読みやすいバージョンは次のとおりです。

names = 
    (for mail in @data when mail.service_name is service.name 
    mail.folder).unique() 
あなたは複数行にわたってリストの内包表記を分割することはできません

が、ループの通常のもので、それらの一つが解決使用して、値を返すことができます問題。あなたは余分なラインを与えるために喜んでいる場合は、ループの周りぎこちない括弧は必要ありません。

names = 
    for mail in @data when mail.service_name is service.name 
    mail.folder 
names = names.unique() 

最後に、for行のインデントはあなた次第です。

names = 
(for mail in @data when mail.service_name is service.name 
    mail.folder).unique() 
4

このcompiles fine

names = (for mail in @data when mail.service_name is service.name 
      mail.folder).unique() 
+0

最初のバージョンでは、最初のバージョンの「INDEX」*が最初に解決されています。あなたの2番目の解決策はうまくいくようです。 – jackwanders

+0

@ジャックワンダーはい、あなたは正しいです、私はそれを逃したか分からない:S。私はこれを行継続記号 '\'で修正しました。それはそのように機能しますか? (リンクショーはcoffeescript.orgの更新されたexmapleを指し示します) – epidemian

+0

私は\ solution:list comprehension + more readableが好きです – Alexander