本文概述
- 模块命名空间
- 模块混合
实例方法是包含模块时类中的方法。
可以在不创建封装对象的情况下调用模块方法, 而在实例方法则不能。
它们与类相似, 因为它们包含方法, 类定义, 常量和其他模块的集合。它们的定义类似于类。不能使用模块创建对象或子类。没有继承的模块层次结构。
模块基本上有两个作用:
- 它们充当命名空间。它们可以防止名称冲突。
- 它们允许mixin工具在类之间共享功能。
module ModuleNamestatement1statement2...........end
模块名称应以大写字母开头。
模块命名空间在写入较大的文件时, 会生成许多可重用的代码。这些代码被组织为类, 可以将其插入文件中。
例如, 如果两个人在不同文件中具有相同的方法名称。并且两个文件都需要包含在第三个文件中。然后可能会出现问题, 因为两个包含文件中的方法名称相同。
在这里, 模块机制发挥作用。模块定义了一个命名空间, 你可以在其中定义方法和常量, 而不会被其他方法和常量所取代。
例:
假设在file1.rb中, 我们定义了许多不同类型的图书馆书籍, 例如小说, 恐怖片等。
在file2.rb中, 我们定义了已读小说和已读小说(包括小说小说)的数量。
在file3.rb中, 我们需要同时加载文件file1和file2。这里我们将使用模块机制。
file1.rb
#!/usr/bin/ruby # Module defined in file1.rb file module Library num_of_books = 300 def Library.fiction(120) # .. end def Library.horror(180) # .. end end
file2.rb
#!/usr/bin/ruby # Module defined in file2.rb file module Novel total = 123 read = 25 def Novel.fiction(left) # ... end end
file3.rb
require "Library" require "Novel" x = Library.fiction(Library::num_of_books) y = Novel.fiction(Novel::total)
通过在模块名称前加上模块名称和句点来调用模块方法, 然后使用模块名称和两个冒号引用常量。
模块混合Ruby不支持多重继承。模块消除了在Ruby中使用mixin进行多重继承的需要。
一个模块没有实例, 因为它不是类。但是, 模块可以包含在类中。
当你在类中包含模块时, 该类将有权访问该模块的方法。
例:
module Name def bella end def ana end end module Job def editor end def writer end end class Combo include Name include Job def f end end final=Combo.new final.bella final.ana final.editor final.writer final.f
在这里, 模块名称由方法bella和ana组成。模块作业由方法编辑器和编写器组成。由于Combo类可以访问所有四个方法, 因此Combo类包括两个模块。因此, 类Combo用作mixin。
【Ruby模块介绍和用法示例】混合到类中的模块的方法可以是实例方法或类方法。这取决于你如何向类添加mixin。
推荐阅读
- Ruby多线程编程用法全解
- Ruby迭代器用法详细图解
- Ruby异常用法示例详细图解
- Ruby文件I/O操作示例详细图解
- Ruby日期和时间处理和用法
- Ruby目录操作示例详细图解
- Ruby代码块或闭包用法详解
- 《APP》团队冲刺第二阶段 六
- append对len和cap的影响