ruby中的多态

来源:互联网 发布:淘宝怎么设置周末收货 编辑:程序博客网 时间:2024/06/06 02:42

先来看一下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"  endendclass B < A  def f    p "B"  endenddef pf(o)  o.f if o.respond_to?(:f)endff(A.new)ff(B.new)与C++的pf函数相比,不需要指明参数类型,我们只需要判断该对象是否具有某种行为,有的话,就可以把它看作是那种类型的对象。这就是duck type