Ruby模块

2024 年 8 月 29 日 | 阅读 3 分钟

Ruby 模块是方法和常量的集合。模块方法可以是实例方法或模块方法。

实例方法是在包含模块的类中的方法。

模块方法可以在不创建封装对象的情况下调用,而实例方法则不能。

它们类似于类,因为它们包含方法、类定义、常量和其他模块的集合。 它们的定义方式与类类似。 不能使用模块创建对象或子类。 没有模块继承层次结构。

模块基本上有两个用途

  • 它们充当命名空间。 它们防止名称冲突。
  • 它们允许混入工具在类之间共享功能。

语法

模块名称应以大写字母开头。


模块命名空间

在编写较大的文件时,会生成许多可重用代码。 这些代码被组织成类,可以插入到文件中。

例如,如果两个人在不同的文件中具有相同的方法名称。 并且两个文件都需要包含在第三个文件中。 那么这可能会造成问题,因为两个包含文件中的方法名称相同。

在这里,模块机制发挥作用。 模块定义了一个命名空间,您可以在其中定义方法和常量,而不会被其他方法和常量覆盖。

示例

假设在 file1.rb 中,我们定义了许多不同类型的图书馆书籍,如小说、恐怖小说等。

在 file2.rb 中,我们定义了已阅读和待阅读的小说数量,包括小说。

在 file3.rb 中,我们需要加载 file1 和 file2 两个文件。 在这里,我们将使用模块机制。

file1.rb

file2.rb

file3.rb

模块方法通过在其名称前加上模块名称和一个句点来调用,并且您使用模块名称和两个冒号来引用常量。


模块 Mixin

Ruby 不支持多重继承。 模块使用 Ruby 中的 mixin 消除了对多重继承的需求。

模块没有实例,因为它不是一个类。 但是,可以在类中包含一个模块。

在类中包含模块后,该类将可以访问该模块的方法。

示例

在此,模块 Name 包含方法 bella 和 ana。 模块 Job 包含方法 editor 和 writer。 类 Combo 包括两个模块,因此类 Combo 可以访问所有四个方法。 因此,类 Combo 充当 mixin。

混合到类中的模块方法可以是实例方法或类方法。 这取决于你如何将 mixin 添加到类中。

下一个主题Ruby 字符串