我试图从设计模式的角度理解 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/