ruby中的多态

先来看一下C++中的多态,它是通过vitural来实现的,如下:

class A
{
public:
  virtual void f()
  {
    printf("A");
  }
};

class B:public A
{
public:
  void f()
  {
    printf("B");
  }
}

void pf(A *a)
{
  a.f
}

pf(new A)   ------------> "A"
pf(new B)   ------------> "B"

那么ruby中怎么实现上面的多态的呢?看下面的代码:

class A
  def f
    p "A"
  end
end

class B < A
  def f
    p "B"
  end
end

def pf(o)
  o.f if o.respond_to?(:f)
end

ff(A.new)
ff(B.new)

与C++的pf函数相比,不需要指明参数类型,我们只需要判断该对象是否具有某种行为,有的话,就可以把它看作是那种类型的对象。这就是duck type


你可能感兴趣的:(ruby中的多态)