16

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

def funky_method
  self.inspect
end

它返回“主要”。

我怎样才能返回“funky_method”呢?

4

3 回答 3

25

这是代码:

对于 >= 1.9 的版本:

def funky_method

    return __callee__

end

对于版本 < 1.9:

def funky_method

    return __method__

end
于 2012-10-17T18:17:57.190 回答
15

__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
于 2014-07-20T16:48:31.523 回答
2

很简单:


def foo
  puts __method__
end

于 2012-10-17T20:58:53.783 回答