2013-04-16 4 views
0

Я пытаюсь получить имя метода, из которого в настоящее время метод называетсярубин имя метода метапрограммированием

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 "

+2

увидеть этот пост: http://stackoverflow.com/questions/5100299/how-to-get-the-name -of-заместитель вызова-метод – mcfinnigan

ответ

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], чтобы совместить имя в первом.

This answer имеет гораздо лучшее решение для Руби 2.0+

Смотрите также: https://github.com/banister/binding_of_caller

Смежные вопросы