(1)Module和Class的关系、Module和Namespace的关系,Devise
#查看一个类的父类,第二个说明类继承自模块(模块是类的父类)
puts String.superclass,Class.superclass,Module.superclass
#ruby没有命名空间的概念,用来避免与隔绝重复变量名和类名等等,ruby模块作用就是命名空间
#rails开发时,Devise库用来做用户信息验证的,比如用户加密,登陆过后自动更新ip地址登陆时间等
#Devise是个大模块,里面又包含很多小模块,比如更新的模块,登陆的模块,认证的模块
#如下需要用到Devise的login,直接include进来就行
User
include Devise::login
(2)Mix-in,关键字include、extend
首字母必须大写的要是没大写(比如类和模块),系统报错必须是常量(因为常量大写)
模块命名必须首字母大写,不然会报如上错误
module First
A=1
def greet
p "greet"
end
end
module Second
B=2
def self.hello
p "hello"
end
end
class Student
include First
extend First
extend Second
def initialize(no)
@no=no
end
end
a=Student.new(1)
a.greet #这个混入可以使用
Student.greet #这个混入可以使用
Student.hello #extend Second不能使用模块自己的self.方法,模块的.self方法是永远不能被混入的
#重点:include会把方法划分到类的实例方法中去,extend则把模块的方法划分到类的类方法中去