博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Ruby] 模块
阅读量:6090 次
发布时间:2019-06-20

本文共 984 字,大约阅读时间需要 3 分钟。

1. 命名空间

模块定义了一个命名空间,方法和常量可以在其中任意使用而不必担心被其他方法或常量干扰,例如:

module Test  def Test.method()  endend

模块常量的命名和类常量一样,都以大写字母开头,方法定义类似于类方法的定义。如果第三方的程序想要使用这些模块,可以简单地加载这两个文件,并引用它们的完整名称,例如:

require 'test'Test.method()

同类方法一样,可以用模块名和句点来调用模块方法,使用模块名和两个冒号来引用常量。

2. Mixin

模块并没有实例,因为模块并不是类。但是可以在类的定义中include一个模块,当包含发生时,模块的所有实例方法在类中也可以使用,例如:

class Mixin  include Testendmixin = Mixin.new()mixin.method()

Ruby的include并非简单地将模块的实例方法拷贝至类中,它建立一个由类到所包含模块的引用。如果多个类包含这个模块,它们都指向相同的内容。

要混入客户类中的模块,可能会在客户对象中创建实例变量,并可能使用attr_reader或类似方法,定义这些实例变量的访问方法,例如:

moduel Test  def method    @item ||= []  endend

不过,这也可能造成一个mixin中的实例变量可能会和其宿主类或其他mixin中的实例变量相冲突,在运行时,程序可能会产生某些难以诊断的错误行为。

3. 包含其他文件

Ruby有两个语句可以包含文件。每次当load方法执行时,都会将指定的Ruby源文件包含进来,例如:

load 'test.rb'

更常见的是使用require方法来加载指定的文件,且只加载一次,例如:

require 'test'

被加载文件中的局部变量不会蔓延到加载它们所在的范围中。它们都可以接受相对或绝对路径,如果指定了一个相对路径,它们将会在当前加载路径中($:)的每个目录下搜索这个文件。使用load或require所加载的文件,也可以包含其他文件。

require是一个可执行的语句,比如它可能在一个if语句内,此外require还可以加载共享的二进制文件。load会无条件包含源文件,因此可以使用它来重新加载一个在程序开始执行后可能更改的源文件。

转载地址:http://culwa.baihongyu.com/

你可能感兴趣的文章
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
spark高级排序彻底解秘
查看>>
ylbtech-LanguageSamples-PartialTypes(部分类型)
查看>>
福建省促进大数据发展:变分散式管理为统筹集中式管理
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
tomcat多应用之间如何共享jar
查看>>
Flex前后台交互,service层调用后台服务的简单封装
查看>>
MySQL入门12-数据类型
查看>>
Windows Azure 保留已存在的虚拟网络外网IP(云服务)
查看>>
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
需要学的东西
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>