如何在CoffeeScript中缩进列表理解?

时间:2012-06-28 09:33:08

标签: coffeescript indentation

我有以下CoffeeScript行:

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

此行太长,因此不会通过CoffeeLint传递linting。

我试图打破它,但我总是通过CoffeeLint得到缩进错误。

缩进这个的正确方法是什么?

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分:4)

compiles fine

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()

答案 2 :(得分:0)

显然不允许在多行上拆分列表理解:

https://stackoverflow.com/a/8553292