1

現在のメソッドが呼び出されたメソッドの名前を取得しようとしています

def first_method
  my_method
end

def second_method
  my_method
end

def my_method
  puts "called from: #{method_name}"
end

期待される出力:

"呼び出し元: first_method"

"呼び出し元: last_method"

4

1 に答える 1

2
def a
  c
end
def b
  c
end
def c
  p caller
end

a
#=> ["/Users/phrogz/Desktop/tmp.rb:2:in `a'", "/Users/phrogz/Desktop/tmp.rb:11:in `<main>'"]
b
#=> ["/Users/phrogz/Desktop/tmp.rb:5:in `b'", "/Users/phrogz/Desktop/tmp.rb:12:in `<main>'"]

caller[0][/`(.+?)'/,1]最初の名前に一致するような正規表現を使用できます。

この回答には、Ruby 2.0+ 向けのはるかに優れたソリューションがあります。

参照: https://github.com/banister/binding_of_caller

于 2013-04-16T13:03:14.470 に答える