2012-06-28 811 views
5

que tienen la siguiente línea de CoffeeScript:¿Cómo sangro una lista de comprensión en CoffeeScript?

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

Esta línea es demasiado largo, por lo que no pasará pelusa por CoffeeLint.

Estoy tratando de romperlo, pero siempre recibo errores de indentación por CoffeeLint.

¿Cuál es la forma correcta de aplicar sangría a esto? No está permitido

Respuesta

5

Esta es la versión más legible que sin estar demasiado larga:

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

No se puede dividir las listas por comprensión a través de múltiples líneas, sino un bucle normal que también puede devolver un valor, por lo que usar uno de los que resuelve el problema. Si usted está dispuesto a conceder una línea adicional, no hay necesidad de que los paréntesis incómodos alrededor del bucle:

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

Por último, el sangrado de la línea for depende de usted; Encuentro que mi primera versión es más legible pero esto también es válido:

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

Este compiles fine:

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

Usted puede también invertir la for ... when y la expresión:

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

Me sale * ERROR DE PARSE EN LA LÍNEA 1: INESPERADO 'INDENT' * en su primera solución. Su segunda solución parece funcionar bien. – jackwanders

+0

@jackwanders Sí, tienes razón, no sé cómo me perdí eso: S. Lo arreglé ahora con un continuador de línea '\'. ¿Funciona de esa manera? (el enlace muestra un punto de vista actualizado en coffeescript.org) – epidemian

+0

Me gusta la \ solución: lista de comprensión + más legible – Alexander

Cuestiones relacionadas