ruby2.2.2で現在実行中の関数名を取得する
前提
ganmacs@ganmacs~% ruby -v ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]
内容
現在実行中の関数名を取得したいとき、ruby 1.8までは以下のようにしてとれた。
しかし1.9からto_s(Array)
の挙動が変わったらしく2.2.2では動かなった。
class Object def current_method caller.first.scan(/`(.*)'/).to_s end end # when ruby version is 1.8 or earlier puts current_method #=> "<main>" # when ruby verison is 1.9 or later puts current_method #=> [["<main>"]]
なので今は以下のように書くと実行中の関数名を取得できる
class Object def current_method_name caller.first.match(/`(?<method_name>.*)'/)[:method_name] end end puts current_method_name #=> "<main>"