Ruby:Alias意外地指向别名方法的父类实现?

时间:2018-10-12 18:31:04

标签: ruby

我有以下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的{​​{1}}实现,而不是其自身类的实现。例如,将上面的代码加载到irb中:

hello

如何获取别名以指向方法的本地实现而不是父类实现?

1 个答案:

答案 0 :(得分:2)

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 > 必须位于要别名的方法的之后,而不是之前。

经过修改的Child类代码将alias别名为greet的本地实现,

hello