2013-08-01 12 views
5

गैर ब्लॉक चर अनिवार्य हैं:ब्लॉक चर वैकल्पिक क्यों हैं?

def foo arg = nil; end 
foo # => nil 

लेकिन ब्लॉक चर वैकल्पिक हैं::

def foo █ end 
foo # => nil 

def foo arg; end 
foo # => ArgumentError 

आदेश वैकल्पिक तर्क अनुमति देने के लिए, एक डिफ़ॉल्ट मान की आपूर्ति की जानी है

डिफ़ॉल्ट मान के बिना, अनुपस्थित ब्लॉक चर को nil असाइन किया गया है, और वास्तव में, ब्लॉक चर डिफ़ॉल्ट मान नहीं ले सकते:

def foo &block = ->{puts :foo}; end 
# => syntax error 

इसके विपरीत, एक विधि एक अतिरिक्त ब्लॉक कि परिभाषा की आवश्यकता नहीं है ले जा सकते हैं:

def foo; end 
foo{puts :foo} # => nil 

क्या ब्लॉक चर का लाभ इस तरह तैयार किया जा रहा के रूप में गैर-ब्लॉक करने का विरोध किया है चर?

उत्तर

4

कोई ब्लॉक नहीं होने पर त्रुटि को फेंकने के लिए बहुत अधिक बिंदु नहीं होगा, क्योंकि yield या block.call का उपयोग करने वाली कोई भी विधि किसी भी ब्लॉक के बावजूद त्रुटि को फेंक देगी। एक डिफ़ॉल्ट ब्लॉक की आपूर्ति करने के लिए बहुत अधिक बिंदु नहीं होगा, क्योंकि डिफ़ॉल्ट कोड निष्पादित किया जा सकता है, केवल विधि में ही लिखा जा सकता है (जो तर्कों के साथ इनलाइन लिखने से बहुत अधिक स्वच्छ होगा)।

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