2009-10-21 22 views
10

क्या यह किसी अन्य ब्लॉक पर पहुंचने के लिए lambda, proc, method या रूबी में अन्य प्रकार के ब्लॉक के लिए संभव है?
कुछ की तरह ...रूबी: ब्लॉक से उपज ब्लॉक?

a = lambda { 
    puts 'in a' 
    yield if block_given? 
} 

a.call { puts "in a's block" } 

यह काम नहीं करता ... यह सिर्फ

in a 
=> nil 

पैदा करता है वहाँ एक ब्लॉक कॉल करने के लिए ब्लॉक प्राप्त करने के लिए जिस तरह से है?

उत्तर

8

मैं तुम्हें आप ऐसा कर सकते कर सकते हैं अगर यकीन नहीं है, लेकिन कुछ इसी तरह होगा:

रूबी 1.8.6 में:

a = lambda { |my_proc| 
    puts 'in a' 
    my_proc.call 
} 

a.call(lambda { puts "in a's block" }) 

रूबी 1.9.1 में, आप ब्लॉक हो सकता है पैरामीटर

a = lambda { |&block| 
    puts 'in a' 
    block.call 
} 

a.call { puts "in a's block" } 
8

आप ब्लॉक को कॉल कर सकते हैं, जो उपज के समान है।

a = lambda {|&block| block.call if block} 
a.call {print "hello"} 

ध्यान दें कि

a.call 

एक त्रुटि नहीं लौटेगा।

+0

यह नहीं कि यह एक बड़ा सौदा है, लेकिन मैंने देखा कि आप जवाब देने वाले पहले व्यक्ति थे। –

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