2009-02-08 11 views
26

क्या किसी अन्य ऑब्जेक्ट के संदर्भ में एक प्रक्रिया निष्पादित करना संभव है?प्रक्रियाओं का बंधन

मुझे पता है कि आम तौर पर आप proc.call (foo) करेंगे, और तब ब्लॉक को पैरामीटर को परिभाषित करना चाहिए। मैं सोच रहा था कि क्या मुझे फू को बांधने के लिए "स्वयं" मिल सकता है ताकि ब्लॉक पैरामीटर होना आवश्यक न हो।

proc = Proc.new { self.hello } 

class Foo 
    def hello 
    puts "Hello!" 
    end 
end 

foo = Foo.new 

# How can proc be executed within the context of foo 
# such that it outputs the string "Hello"? 

proc.call 

उत्तर

41
foo.instance_eval &proc 

instance_eval एक स्ट्रिंग के बजाय एक ब्लॉक ले जा सकते हैं, और & ऑपरेटर विधि कॉल साथ प्रयोग के लिए एक ब्लॉक में proc बदल जाता है।

+0

'foo.instance_eval (और POC)' –

+0

किसी ने मुझे इस के लिए एक दस्तावेज़ लिंक दे सकते हैं? यह निश्चित रूप से काम करता है (और ** ** वास्तव में ** कमाल है), लेकिन मैं दस्तावेज़ों को पढ़ना चाहता हूं। :) –

+1

@ जोश ग्लोवर: http://www.ruby-doc.org/core-1.8.7/classes/Object.html#M000005 – Chuck

0

यह गहरे लाल रंग का 1.9 के लिए है:

class MyCat 
    def initialize(start, &block) 
    @elsewhere = start 
    define_singleton_method(:run_elsewhere, block) if block_given? 
    end 
end 
MyCat.new('Hello'){ @elsewehere << ' world' }.run_elsewhere 
संबंधित मुद्दे