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

Как выбрать конкретный вызов метода в цепочке наследования?

class A
  def boo; puts "A:Boo"; end
end

class B < A
  def boo; super; puts "B:Boo"; end
end

class C < B
  def boo; self.A.boo(???); puts "C:Boo"; end
end

Таким образом, вывод будет A: Boo, C: Boo

ТИА

-daniel

1 Ответ

5 голосов
/ 29 июня 2010

Вы можете сделать

class C < B
  def boo
    A.instance_method(:boo).bind(self).call
    puts "C:Boo"
  end
end

Однако, если вам это нужно, обычно это показатель того, что вам следует переосмыслить свой дизайн.В частности, если C нуждается в реализации A boo, возможно, B не должен переопределять это.

...