2011-05-26 6 views
5

मैं चर में एक उदाहरण विधि कैसे प्राप्त कर सकता हूं? उदाहरण के लिए:रूबी में एक चर के लिए बाध्य एक उदाहरण विधि कैसे प्राप्त करें?

class Foo 
    def bar 
    puts "bar" 
    end 
end 

मैं "बार" आवृत्ति विधि (उदाहरण के लिए, इसे पास करने के लिए) में हेरफेर करने में सक्षम होना चाहता हूं। मैं यह कैसे कर सकता हूं?

मुझे लगता है कि मैं कक्षा

foo_class = Kernel.const_get("Foo") 

के साथ लगातार प्राप्त कर सकते हैं पता है कि इसी तरह कुछ भी मैं Foo#bar प्राप्त करने के लिए कर सकते हैं? विधि दायरे में

class Foo 
    def initialize(value) 
    @value = value 
    end 

    def bar 
    @value 
    end 
end 

unbound_bar = Foo.instance_method(:bar) 
p unbound_bar.bind(Foo.new("hello")).call 
#=> "hello" 
+0

कक्षा विधि 'self.bar'? – fl00r

+0

क्या आप गतिशील रूप से बदलना चाहते हैं कि बार विधि कैसे काम करती है या आप बस बार विधि को कॉल करना चाहते हैं ताकि वह 'बार' आउटपुट कर सके? –

+0

@ fl00r: यह काम नहीं करता है। मेरे पास कक्षा का उदाहरण नहीं है। @ स्कॉट गॉट्रेयू: मैं इसे कॉल करने में सक्षम होना चाहता हूं। –

उत्तर

7

यह आप एक UnboundMethod की जरूरत लगती है। आप उसे कॉल कर सकते हैं, यह अभी भी self से जुड़ा हुआ है।

+1

+1 बना सकते हैं, लेकिन अंतिम'" हैलो "' 'bar' 'नहीं होना चाहिए? –

+0

हाँ, तय .... – tokland

+0

हेल से हाँ –

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