ruby - 可以将 Ruby 模块描述为单例类吗?

标签 ruby design-patterns module

我试图从设计模式的角度理解 Ruby 模块的用途。

Ruby 模块本质上只是一个只初始化一次的类吗?

包含 MyModule

最佳答案

ruby 类是一个可以创建实例的模块。与类一样,模块可以有方法,但不能创建模块的实例。这是它们之间的唯一区别。

在实践中,模块通常用于:

  • 命名空间
  • 混合
  • 举办事件

命名空间

这是一个用作命名空间的模块示例:

module MyLib
  class Foo
  end
  class Bar
  end
end

这些类的全称是MyLib::Foo 和MyLib::Bar。因为它们包含在命名空间中(大概是唯一的),所以名称 Foo 和 Bar 不能与您的程序或其他库中定义的 Foo 或 Bar 冲突。

混合

这是一个用作混合的模块:

module Mixin
  def foo
    puts "foo"
  end
end

由于您无法创建 Mixin 模块的实例,因此您可以通过包含(混入)该模块来访问 foo:

class MyClass
  include Mixin
end

MyClass.new.foo    # => foo

函数

与类一样,模块可以包含不对任何实例进行操作的函数。为此,您在模块中定义类方法:

module SomeFunctions
  def self.foo
    puts "foo"
  end
end

在模块中定义的类方法就像在类中定义的类方法一样。调用它:

SomeFunctions.foo    # => foo

关于ruby - 可以将 Ruby 模块描述为单例类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19352867/

相关文章:

ruby - 如何使用正则表达式从标签后的字符串中提取价格?

java - 在运行单个测试用例时,是否有一种好的方法来进行测试套件的初始化?

powershell - 如何隐藏powershell脚本模块代码

frameworks - 模块、库和框架之间的区别

c++ - 如何使用 gcc/g++ 11.1 导入模块

ruby - 使 ruby​​ gems 响应终端命令

ruby - 如何在 Ruby 应用程序中找到未使用的方法?

ruby-on-rails - rails :Send mail using mailer when controller finishes its execution

iPhone 和 iPad 开发 - 良好的设计架构以实现最大的可重用性

java - 策略设计模式: Calling constructor of behavioral class