5

我有以下行CoffeeScript

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

这条线太长了,所以它不会通过 linting 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 回答