alt*_*alt 3 ruby design-patterns module
我试图从设计模式的角度来理解Ruby模块的目的.
Ruby模块本质上只是一个只初始化一次的类吗?
include MyModule
Way*_*rad 11
ruby类是一个可以创建实例的模块.像类一样,模块可以有方法,但是你不能创建模块的实例.这是他们之间的唯一区别.
在实践中,模块通常用于:
以下是用作名称空间的模块示例:
module MyLib
class Foo
end
class Bar
end
end
Run Code Online (Sandbox Code Playgroud)
这些类的全名是MyLib :: Foo和MyLib :: Bar.因为它们包含在命名空间中(可能是唯一的),所以名称Foo和Bar不能与程序或其他库中定义的Foo或Bar冲突.
这是一个用作混合的模块:
module Mixin
def foo
puts "foo"
end
end
Run Code Online (Sandbox Code Playgroud)
由于您无法创建Mixin模块的实例,因此您可以通过包含(混合)模块来访问foo:
class MyClass
include Mixin
end
MyClass.new.foo # => foo
Run Code Online (Sandbox Code Playgroud)
像类一样,模块可以保存不在任何实例上运行的函数.为此,您可以在模块中定义类方法:
module SomeFunctions
def self.foo
puts "foo"
end
end
Run Code Online (Sandbox Code Playgroud)
模块中定义的类方法就像类中定义的类方法一样.打电话给它:
SomeFunctions.foo # => foo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |