• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby模块(module)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Ruby模块(module)  

2013-04-03 16:47:09|  分类: Ruby 订阅

 
 

       Ruby 和 Java 一样支持单继承,也正如 Java 引入 interface 来解决多继承的两难问题一样,Ruby 也提供了单继承和多继承的妥协机制:即模块。

       模块的定义和类比较相似,使用module关键字。但模块不能被实例化,也不能被子类化,模块是独立的,且一个模块对像是Module类的一个实例。在模块中,可以定义实例变量、实例方法、类变量、类方法和属性等,并且在模块中还可能以定义类和模块。在类中也可以定义模块。 但是,必须被类引用才能使用模块内容。

       模块最常用的两个用途是作为命空间和混入(mixin)。

 

加载和请求模块

        有时由于项目需要会把不同的类或模块存放在不同的文件中,在使用这些文件时,就要用 load 和 require 来加载这些文件。在使用文件中的模块和对象时,还需要使用 include 和 extend 方法。

1、require 和 load的区别:

 

 比较项目

 load

 require

 参数

 文件名称包含扩展名

 只需传入库的名字,不需要后缀

 加载次数

 可以把同一文件加载多次

 一个文件最多只加载一次

 作用

 相当于复制粘贴

 不仅可加载ruby源文件,也可加载其他语言源文件

 

2、include方法

        该方法主要用来将一个模块包含到(混入)一个类或者其它模块。在类定义中引入模块,使模块中的方法成为类的实例方法;这个模块的方法在引入它的类或模块中以函数的形式调用,include 并非将模块的实例方法简单拷贝到类中,而是建立了一个类到模块的引用。例如:

 1 # 模块文件名为:TestModule
 2 module Foo
 3   def hello
 4     puts "This is my first module in Ruby!"
 5   end
 6 end
 7 
 8 # 另有一个类文件名为:Test
 9 # Test类和TestModule模块在同一路径下
10 #require "D:/cucumber/Ruby/TestModule" #(加载文件)绝对路径
11 require "../Ruby/TestModule" #(加载文件)相对路径
12 
13 
14 class TestOne
15   include Foo #混入模块
16   def hi
17     puts "This is a class"
18   end
19 end 
20 
21 a=TestOne.new
22 a.hi
23 a.hello

3、extend方法

extend 用来在一个对象(object,或者说是instance)中引入一个模块,这类从而也具备了这个模块的方法,例如:

 1 # 定义模块
 2 
 3 module FirstModule
 4   def helloMod
 5     puts "This is a module."
 6   end
 7 end
 8 
 9 # 定义类
10 class FirstClass
11   def helloClass
12     puts "This is a class."
13   end
14 end 
15 
16 c = FirstClass.new
17 c.helloClass # 调用类方法
18 c.extend( FirstModule ) # 对象引入模块
19 c.helloMod # 调用模块方法

 

4、加载路径

        Ruby的加载路径是一个数组,可以使用全局变量$LOAD_PATH 或 $:进行访问。数组的每个元素都是一个目录史,ruby在这些目录中查找加载的文件,前面的目录比后面的目录优选被查找;可以使用 puts $: 输出路径;Ruby程序也可以通过修改$LOAD_PATH($:)数组的内容来修改加载路径。例如:

1 puts $:
2 $:<<"../.."# 修改加载路径的值
3 puts"@@@@@@@"
4 puts $: 

    当然,对load或require使用绝对路径,完全绕过加载路径。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Sass开发 – Ruby安装出错解决办法:淘宝网镜像 RubyGems发布时间:2022-07-14
下一篇:
Ruby Tutorial发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap