2012-06-28 6 views
5

मैं CoffeeScript की निम्न पंक्ति है:मैं कॉफीस्क्रिप्ट में सूची समझ कैसे इंडेंट करूं?

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

इस लाइन बहुत लंबी है, तो यह CoffeeLint द्वारा linting पारित नहीं होगा।

मैं इसे तोड़ने की कोशिश कर रहा हूं, लेकिन मुझे हमेशा CoffeeLint द्वारा इंडेंटेशन त्रुटियां मिलती हैं।

इसे इंडेंट करने का सही तरीका क्या है?

उत्तर

5
:

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

आप एक से अधिक लाइनों पर सूची comprehensions विभाजित नहीं कर सकते, लेकिन पाश के लिए एक सामान्य भी मान सकते हैं, तो उनमें से एक को हल करती है का उपयोग करते हुए मुसीबत। आप एक अतिरिक्त पंक्ति देने के लिए तैयार हैं, तो वहाँ पाश के आसपास अजीब कोष्ठकों की आवश्यकता नहीं है:

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

यह compiles fine:

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

मुझे आपके पहले समाधान पर लाइन 1: अनपेक्षित 'इंडेंट' * पर PARSE त्रुटि मिलती है। आपका दूसरा समाधान ठीक काम करता प्रतीत होता है। – jackwanders

+0

@ जैकवांडर्स हाँ, आप सही हैं, मुझे नहीं पता कि मुझे यह कैसे याद आया: एस। मैंने तय किया कि अब एक लाइन निरंतर '\ 'के साथ। क्या यह इस तरह से काम करता है? (लिंक शो coffeescript.org में एक अद्यतन एक्समैपल को इंगित करता है) – epidemian

+0

मुझे \ समाधान: सूची समझ + अधिक पठनीय पसंद है – Alexander

संबंधित मुद्दे