Ruby: Псевдоним неожиданно указывает на реализацию метода псевдонимов в родительском классе? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть следующий код Ruby, который содержит alias в дочернем классе метода, который определен в суперклассе и переопределен в дочернем классе:

class Parent
  def hello
    print "Hello, I'm Parent!"
  end
end

class Child < Parent
  alias greet hello
  def hello
    print "Hi, I'm Child!"
  end
end

Когда я вызываю greet псевдоним экземпляра Child, он вызывает Parent реализацию hello, а не реализацию его собственного класса.Например, с помощью приведенного выше кода, загруженного в irb:

2.3.3 :001 > child = Child.new
 => #<Child:0x007fb1118a8f58> 
2.3.3 :002 > child.hello
Hi, I'm Child! => nil 
2.3.3 :003 > child.greet
Hello, I'm Parent! => nil 
2.3.3 :004 > 

Как получить псевдоним, указывающий на локальную реализацию метода вместо реализации родительского класса?

1 Ответ

0 голосов
/ 12 октября 2018

alias должен быть расположен после метода для псевдонима, а не до.

Этот пересмотренный код для класса Child будет иметь greet с псевдонимом для локальной реализацииhello, как и предполагалось:

class Child < Parent
  def hello
    print "Hi, I'm Child!"
  end
  alias greet hello
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...