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

Chi*_*Kan 13 ruby metaprogramming ruby-on-rails

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

def funky_method
  self.inspect
end
Run Code Online (Sandbox Code Playgroud)

它返回"main".

我怎样才能返回"funky_method"?

RAM*_*RAM 22

这是代码:

对于版本> = 1.9:

def funky_method

    return __callee__

end
Run Code Online (Sandbox Code Playgroud)

对于版本<1.9:

def funky_method

    return __method__

end
Run Code Online (Sandbox Code Playgroud)

  • 同义词:`__ method__` (3认同)

小智 11

__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
Run Code Online (Sandbox Code Playgroud)