Как получить имя вызывающего метода в Ruby? - PullRequest
1 голос
/ 28 апреля 2020

Я хочу создать родительский класс (или модуль) с методами, которые делают что-то с именем метода дочерних классов, где вызывается родительский метод. Пример:

class Foo
  def foo
    puts __method__
  end
end

class Bar < Foo
  def bar
    foo
  end
end

Когда вызывается Bar.new.bar, он печатает :foo, но я хочу, чтобы он печатал bar. Каким должен быть Foo#foo метод, чтобы удовлетворить это поведение?

1 Ответ

2 голосов
/ 28 апреля 2020

Попробуйте caller:

class Foo
  def foo
    puts caller[0][/`.*'/][1..-2]
  end
end

class Bar < Foo
  def bar
    foo
  end
end

Bar.new.bar #=> bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...