5

次の行がありCoffeeScriptます:

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

この行は長すぎるため、 による lint を通過しませんCoffeeLint

私はそれを壊そうとしていますが、常にインデントエラーが発生しCoffeeLintます.

これをインデントする適切な方法は何ですか?

4

3 に答える 3

5

これは、過度に長くなることなく、最も読みやすいバージョンです。

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

リスト内包表記を複数の行に分割することはできませんが、通常の for ループでも値を返すことができるため、それらのいずれかを使用すると問題が解決します。余分な行を許可する場合は、ループを囲む厄介な括弧は必要ありません。

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()
于 2012-07-02T01:02:04.120 に答える
4

これはうまくコンパイルされます

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()
于 2012-06-28T15:10:31.650 に答える
0

どうやら、リスト内包表記を複数行に分割することは許可されていません。

https://stackoverflow.com/a/8553292

于 2012-06-28T09:35:54.530 に答える