0

一些代码

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是 的一个实例ParentPrint是接口中暴露的方法,两个类都定义了它们。Child决定在(可能非常复杂)方法中做其他事情,但会在某些条件下调用其父方法。

我可以写

  def print
    if @num == 1 
      super
    else
      p "I'm the child"
    end 
  end

这行得通,但如果它不仅仅是一个简单的单行比较,而是做很多复杂的事情,应该被分成另一种方法呢?在决定调用父类的方法之前,它可能需要进行一些计算。

或者也许有一种不同的、更好的设计方法。

4

1 回答 1

1
Parent.instance_method(:print).bind(self).call

这已经很容易阅读了,但这里有一个解释。

  1. 获取类的#print方法Parent
  2. 将其绑定到您当前的对象
  3. 称它为

PS:你甚至可以给参数#call,它们将被传递给被调用的方法。

PPS:也就是说,这样的代码几乎总是暗示你的类设计中存在问题。你应该尽可能地避免它。

于 2012-08-24T22:23:56.230 回答