2010-08-24 19 views
7

कुछ की तरह:क्या रूबी में एक से अधिक ब्लॉक को एक से अधिक ब्लॉक पास करना संभव है?

def foo(&b1, &b2) 
    b1.call 
    b2.call 
end 

foo() { puts "one" } { puts "two" } 
+0

[Passi का संभावित डुप्लिकेट एनजी एकाधिक कोडब्लॉक तर्क के रूप में] (http://stackoverflow.com/questions/2463612/passing-multiple-codeblocks-as-arguments) –

उत्तर

13

आप कि रास्ते में कई ब्लॉक पारित नहीं हो सकता है, लेकिन आप कर सकते हैं पास कई proc या lambda वस्तुओं:

irb(main):005:0> def foo(b1, b2) 
irb(main):006:1> b1.call 
irb(main):007:1> b2.call 
irb(main):008:1> end 
=> nil 
irb(main):009:0> foo(Proc.new {puts 'one'}, Proc.new {puts 'two'}) 
one 
two 
=> nil 
irb(main):010:0> 
+1

ठीक है मैं देखता हूं। मुझे लगता है कि मैं लैम्ब्डा {रखता है "bla"} का भी उपयोग कर सकता हूं। मुझे लगता है कि नीचे की रेखा यह है कि मैं केवल विधि परिभाषा में सबसे अधिक बार उपयोग और ब्लॉक कर सकता हूं। धन्यवाद। – rui

1

वाक्य रचना एक बहुत में अधिक आकर्षक है रूबी 1.9:

foo ->{puts :one}, ->{puts :two} 
संबंधित मुद्दे