一些代码
class Parent
def print
p "Hi I'm the parent"
end
end
class Child < Parent
def initialize(num)
@num = num
end
def print
child_print
end
def child_print
if @num == 1
#call parent.print
else
p "I'm the child"
end
end
end
c1 = Child.new(1)
c2 = Child.new(2)
c1.print
c2.print
Child
是Parent
的一个实例。 Print
是接口中公开的方法,两个类都定义它们。 Child
决定在(可能非常复杂的)方法中做其他事情,但会在某种情况下调用其父方法。
我可以写
def print
if @num == 1
super
else
p "I'm the child"
end
end
这是有效的,但如果它不仅仅是一个简单的单线比较,而是做了很多复杂的事情,应该分成另一种方法呢?在决定调用父方法之前,可能需要进行一些计算。
也许有一种不同的,更好的方式来设计它。
答案 0 :(得分:1)
Parent.instance_method(:print).bind(self).call
这已经非常易读,但这是一个解释。
#print
类Parent
方法
PS:您甚至可以向#call
提供参数,并将它们转发给被调用的方法。