2009-11-14 8 views
17

This question रुबी ब्लॉक को पारित वैकल्पिक तर्कों से संबंधित है। मैं सोच रहा हूं कि डिफ़ॉल्ट मानों के साथ तर्क परिभाषित करना भी संभव है, और इसके लिए वाक्यविन्यास क्या होगा।रूबी में डिफ़ॉल्ट तर्क के साथ एक ब्लॉक को परिभाषित करना संभव है?

पहली नज़र में, ऐसा लगता है कि इस सवाल का जवाब है "नहीं":

def call_it &block 
    block.call 
end 

call_it do |x = "foo"| 
    p "Called the block with value #{x}" 
end 

... परिणामों में:

{|a,b=1| ... } 

उत्तर

28

माणिक 1.9 यह अनुमति देता है गरीब व्यक्ति के डिफ़ॉल्ट ब्लॉक तर्क:

def call_it &block 
    block.call 
end 

call_it do |*args| 
    x = args[0] || "foo" 
    p "Called the block with value #{x}" 
end 
+2

... और मैं 1.8.7 पर हूं, जो बताता है कि यह मेरे लिए क्यों काम नहीं कर रहा है। : - \ –

17

:

my_test.rb:5: syntax error, unexpected '=', expecting '|' 
    call_it do |x = "foo"| 
       ^
my_test.rb:6: syntax error, unexpected tSTRING_BEG, expecting kDO or '{' or '(' 
     p "Called the block with value #{x}" 
     ^
my_test.rb:7: syntax error, unexpected kEND, expecting $end 
    end 
    ^
संबंधित मुद्दे