Ruby - 如何在自身内部获取方法名称?

时间:2012-10-17 18:10:08

标签: ruby-on-rails ruby metaprogramming

我正在尝试从自身获取方法名称:

def funky_method
  self.inspect
end

返回“main”。

如何返回“funky_method”?

3 个答案:

答案 0 :(得分:21)

以下是代码:

对于版本> = 1.9:

def funky_method

    return __callee__

end

对于版本< 1.9:

def funky_method

    return __method__

end

答案 1 :(得分:10)

__callee__返回"名称"当前方法,而__method__返回定义中的"名称"目前的方法。

因此,当与alias_method一起使用时,__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

答案 2 :(得分:1)

很简单:


def foo
  puts __method__
end