Как вернуть строковое имя вызывающего метода? - PullRequest
3 голосов
/ 07 апреля 2010

Прямо сейчас мой код работает так:

def method_a
  self.method_b ==> 'method_b'
end

def method_b
  puts self.name_of_calling_method
end

def name_of_calling_method
  if  /`(.*)'/.match(caller.first)
    return $1
  else
    return nil
  end
end

Вместо method_b, печатающим 'method_b', как я могу напечатать имя вызывающего метода - 'method_a'?

Ответы [ 2 ]

3 голосов
/ 08 апреля 2010

Когда вы набираете name_of_calling_method из method_b, тогда method_a на 1 позицию выше стека вызовов, поэтому вам нужно caller[1] в name_of_calling_method вместо caller.first или caller[0].

Поскольку вы поместили регулярное выражение с левой стороны, а индекс в caller справа, вам не понадобится дополнительная проверка nil для случая, когда method_b вызывается напрямую и caller[1] is nil - ваш не совпадает else чехол покроет его.

2 голосов
/ 07 апреля 2010

Заменить caller.first на caller[1].

...