Ruby-模块和类

首先看下他们的关系

  1. irb(main):100:0> String.class
  2. => Class
  3. irb(main):101:0> String.class.superclass 
  4. => Module
  5. irb(main):102:0> String.class.superclass.superclass 
  6. => Object

class < Module < Object

1、类 只能单继承,但是可以包含多个模块

module AA
  def AA.prints1(str)
    print "A:"+str
  end
end


module BB
  def BB.prints2(str)
    print "B:"+str
  end
end

class CC
  include AA
  AA.prints1("aa")
  include BB
  BB.prints2("bb")
end

2、模块 就和c#接口类似,包含一些公共接口方法,无法实例化

类调用模块的两种方式

A.rb 在方法前加 模块名.方法名 (AA.prints1) , 在其引用类中就可以直接调用 AA.prints1

module AA
  def AA.prints1(str)
    print "A:"+str
  end
end

B.rb 如果没有加模块名则需要在其引用类中添加 include BB把方法包含进引用类中,相当于继承了方法,然后就可以直接调用了prints2

module BB
  def prints2(str)
    print "B:"+str
  end
end

原文地址:https://www.cnblogs.com/yangleiWPF/p/4481941.html