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 に答える