2011-07-28 19 views
8

संभव डुप्लिकेट:
Ruby block and unparenthesized argumentsरूबी ब्लॉक विन्यास त्रुटि

मुझे यकीन है कि मैं इस सिंटैक्स त्रुटि समझ में नहीं हूँ। मैं रेलवे ऐप में कुछ फ़ाइल अपलोड प्रबंधित करने के लिए कैरियरवेव का उपयोग कर रहा हूं, और मुझे लगता है कि गलत तरीके से एक विधि में ब्लॉक को पास किया जा रहा है।

यहाँ Carrierwave Docs में उदाहरण है:

version :thumb do 
    process :resize_to_fill => [200,200] 
end 

यहाँ मैं क्या था है:

version :full { process(:resize_to_limit => [960, 960]) } 
version :half { process(:resize_to_limit => [470, 470]) } 
version :third { process(:resize_to_limit => [306, 306]) } 
version :fourth { process(:resize_to_limit => [176, 176]) } 

से काम नहीं होता, मैं syntax error, unexpected '}', expecting keyword_end मिलता है। दिलचस्प बात यह पूरी तरह से निम्नलिखित काम करता है:

version :full do process :resize_to_limit => [960, 960]; end 
version :half do process :resize_to_limit => [470, 470]; end 
version :third do process :resize_to_limit => [306, 306]; end 
version :fourth do process :resize_to_limit => [176, 176]; end 

तो, मेरे सवाल है, मैं क्यों इस उदाहरण में do...end नहीं बल्कि ब्रेसिज़ का उपयोग कर एक ब्लॉक पारित कर सकते हैं?

धन्यवाद!

+0

यह [कोड ब्लॉक 'के लिए पारित each' कोष्ठक के साथ काम करता का डुप्लिकेट है लेकिन' do' साथ नहीं -'end' (रूबी)] (http://StackOverflow.Com/q/6718340/), [ब्लॉक परिभाषा - ब्रेसिज़ और 'do'-'end' के बीच अंतर?] (http://StackOverflow.Com/q/6179442 /), [रूबी मल्टीलाइन ब्लॉक 'do'' end' के बिना] (http://StackOverflow.Com/q/3680097/), ['do' ब्लॉक बनाम ब्रैकेट' {} '] का उपयोग करके (http: // StackOverflow.Com/q/2122380/), [रुबी में इन ब्लॉक कोडिंग शैलियों का अंतर या मूल्य क्या है?] (Http://StackOverflow.Com/q/533008/) और [रूबी ब्लॉक और अनपेक्षित तर्क] (http : //StackOverflow.Com/q/420147/)। –

उत्तर

14

इस प्रयास करें:

version(:full) { process(:resize_to_limit => [960, 960]) } 
version(:half) { process(:resize_to_limit => [470, 470]) } 
version(:third) { process(:resize_to_limit => [306, 306]) } 
version(:fourth) { process(:resize_to_limit => [176, 176]) } 

आप एक पूर्वता समस्या है। { } ब्लॉक do...end ब्लॉक से अधिक कठिन और एक विधि कॉल से कड़ा है; नतीजा यह है कि रूबी सोचता है कि आप ब्लॉक को प्रतीक के रूप में एक तर्क के रूप में आपूर्ति करने की कोशिश कर रहे हैं और नहीं कहते हैं।

आप एक स्पष्ट देख सकते हैं या तुलना करके संभवतः अधिक परिचित उदाहरण का पालन करना (?):

[1, 2, 3].inject 0 { |x, y| x + y } 
[1, 2, 3].inject(0) { |x, y| x + y } 
+0

यह बिल्कुल ठीक है। त्वरित स्पष्टीकरण के लिए धन्यवाद! – Andrew

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