2012-06-28 29 views
5

Tôi có dòng sau của CoffeeScript:Làm cách nào để thụt lề danh sách hiểu trong CoffeeScript?

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

dòng này quá dài, vì vậy nó sẽ không vượt qua Linting bởi CoffeeLint.

Tôi đang cố gắng phá vỡ nó, nhưng tôi luôn nhận được lỗi thụt đầu dòng theo số CoffeeLint.

Cách thích hợp để thụt lề điều này là gì?

Trả lời

5

Đây là phiên bản có thể đọc được hầu hết đó mà không nhận được quá dài:

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

Bạn không thể chia comprehensions danh sách trên nhiều dòng, nhưng một bình thường đối với vòng lặp cũng có thể trả về một giá trị, vì vậy sử dụng một trong những giải quyết vấn đề. Nếu bạn sẵn sàng cấp thêm một dòng, không có nhu cầu sử dụng dấu ngoặc đơn vụng quanh vòng lặp:

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

Cuối cùng, thụt đầu dòng của dòng for là tùy thuộc vào bạn; Tôi thấy phiên bản đầu tiên của mình dễ đọc hơn nhưng điều này cũng hợp lệ:

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

này compiles fine:

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

Bạn cũng có thể đảo ngược for ... when và các biểu hiện:

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

Tôi nhận * PARSE ERROR ON LINE 1: UNEXPECTED 'INDENT' * trên giải pháp đầu tiên của bạn. Giải pháp thứ hai của bạn dường như hoạt động tốt. – jackwanders

+0

@jackwanders Có, bạn đúng, tôi không biết làm thế nào tôi bị mất rằng: S. Tôi đã sửa nó ngay bây giờ với một bộ nối tiếp dòng '\'. Nó có hoạt động theo cách đó không? (liên kết hiển thị điểm đến một exmaple cập nhật trong coffeescript.org) – epidemian

+0

Tôi thích \ solution: list comprehension + more readable – Alexander

Các vấn đề liên quan