首先看下他们的关系
- irb(main):100:0> String.class
- => Class
- irb(main):101:0> String.class.superclass
- => Module
- irb(main):102:0> String.class.superclass.superclass
- => 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