推荐答案
在 Ruby 中,模块(Module)是通过 module 关键字来定义的。模块可以包含方法、常量和类变量,但不能实例化。模块的主要用途是提供命名空间和实现多重继承(通过 mixin)。
// www.javascriptcn.com code example
module MyModule
CONSTANT = 42
def self.module_method
puts "This is a module method."
end
def instance_method
puts "This is an instance method."
end
end本题详细解读
模块的定义
在 Ruby 中,模块是通过 module 关键字定义的。模块的名称通常以大写字母开头,遵循常量命名规则。模块内部可以定义常量、类方法和实例方法。
// www.javascriptcn.com code example
module MyModule
CONSTANT = 42
def self.module_method
puts "This is a module method."
end
def instance_method
puts "This is an instance method."
end
end模块的使用
模块可以通过 include 或 extend 关键字混入到类中。include 会将模块的实例方法添加到类的实例中,而 extend 会将模块的实例方法添加到类的单例类中,使其成为类方法。
// www.javascriptcn.com code example class MyClass include MyModule end obj = MyClass.new obj.instance_method # 输出: This is an instance method. class AnotherClass extend MyModule end AnotherClass.module_method # 输出: This is a module method.
模块的命名空间
模块还可以用作命名空间,以避免命名冲突。通过将类或方法定义在模块内部,可以有效地组织代码并避免全局命名空间的污染。
// www.javascriptcn.com code example
module MyNamespace
class MyClass
def self.say_hello
puts "Hello from MyNamespace::MyClass"
end
end
end
MyNamespace::MyClass.say_hello # 输出: Hello from MyNamespace::MyClass模块的常量
模块中的常量可以通过模块名直接访问。
puts MyModule::CONSTANT # 输出: 42
模块的类方法
模块中的类方法可以通过模块名直接调用。
MyModule.module_method # 输出: This is a module method.
模块的实例方法
模块中的实例方法需要通过 include 混入到类中后才能使用。
class MyClass include MyModule end obj = MyClass.new obj.instance_method # 输出: This is an instance method.