2012-10-17 7 views
9

मैं खुद से एक विधि नाम पाने के लिए कोशिश कर रहा हूँ:रूबी - मैं अपने भीतर एक विधि नाम कैसे प्राप्त कर सकता हूं?

def funky_method 
    self.inspect 
end 

यह रिटर्न "मुख्य"।

मैं इसके बजाय "funky_method" कैसे वापस कर सकता हूं?

उत्तर

21

यहाँ कोड है:

संस्करणों के लिए> = 1.9:

def funky_method 

    return __callee__ 

end 

संस्करणों < 1.9 के लिए:

def funky_method 

    return __method__ 

end 
+3

पर्याय: '__method__' – steenslag

+1

केवल' __method__' 1.8, में काम करेंगे '__callee__' 1.9 – UncleGene

+1

तो साथ आता है, तुम कह रहे हो कि' __method__' रूबी संस्करण> = 1.9 के लिए काम नहीं करता है? चेतन पाटिल के जवाब के मुताबिक, वे अलग-अलग मूल्यों का उत्पादन करते हैं, कॉलर बनाम विधि नाम बनाते हैं। –

0

बहुत ही सरल:

 

def foo 
    puts __method__ 
end 
 
7

__callee__ वर्तमान विधि के "नामित नाम" देता है जबकि __method__ वर्तमान विधि के "परिभाषा पर नाम" देता है।

परिणामस्वरूप, __method__ alias_method के साथ उपयोग किए जाने पर अपेक्षित परिणाम वापस नहीं करता है।

class Foo 
    def foo 
    puts "__method__: #{__method__.to_s} __callee__:#{__callee__.to_s} " 
    end 

    alias_method :baz, :foo 
end 

Foo.new.foo # __method__: foo __callee__:foo 
Foo.new.baz # __method__: foo __callee__:baz 
संबंधित मुद्दे

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