我有以下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
如何获取别名以指向方法的本地实现而不是父类实现?
答案 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