码迷,mamicode.com
首页 > 其他好文 > 详细

(十四)模块(Module)的补充、Mix-in

时间:2016-01-27 22:51:09      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

(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则把模块的方法划分到类的类方法中去

技术分享

 

(十四)模块(Module)的补充、Mix-in

标签:

原文地址:http://www.cnblogs.com/blueColdFire/p/5164670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!