定义模块
命名空间与方法
定义模块 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。
命名空间与方法
模块是用于容纳方法和常量的容器。与类不同,您不能创建模块的实例。模块有两种用途:组织代码(命名空间)和共享行为(混入)。
module Greeter
def self.hello
"Hello from the module"
end
end
puts Greeter.hello模块方法
使用 self. 定义方法,即可像调用实用函数一样直接在模块上调用它。这些方法通常称为模块函数。
module MathTools
def self.square(x)
x * x
end
end
puts MathTools.square(7)模块常量
模块也可以保存常量。使用作用域运算符 :: 访问它们。
module Physics
GRAVITY = 9.81
end
puts Physics::GRAVITY为类设置命名空间
将类放入模块中,可以避免名称冲突。完整名称使用 ::。
module Store
class Item
def initialize(name)
@name = name
end
def to_s
@name
end
end
end
puts Store::Item.new("Book")命名空间为何重要
两个库可能都会定义一个 Logger。命名空间可以将它们分开:Audio::Logger 和 Network::Logger 永远不会冲突。
module Audio
class Logger
def name; "audio logger"; end
end
end
module Network
class Logger
def name; "network logger"; end
end
end
puts Audio::Logger.new.name
puts Network::Logger.new.name模块函数
module_function 会让后续方法既可以在模块上调用,也可以在混入后作为私有实例方法调用。这样可以避免重复写 self.。
module Calc
module_function
def add(a, b)
a + b
end
end
puts Calc.add(2, 3)组织相关常量
模块非常适合将相关的配置值组织在一个清晰的名称下。
module Color
RED = "#FF0000"
GREEN = "#00FF00"
BLUE = "#0000FF"
end
puts Color::GREEN嵌套模块
模块可以嵌套在其他模块中,以实现更深层次的组织。
module App
module Config
VERSION = "1.0"
end
end
puts App::Config::VERSION列出模块内容
反射方法可以让您在运行时检查模块的常量和方法。
module Settings
WIDTH = 80
HEIGHT = 24
end
p Settings.constants模块无法实例化
对命名模块使用 Module.new 会失败,因为模块没有用于创建实例的构造方法。模块是命名空间和行为容器,而不是用于创建对象的蓝图。
module Tools
end
begin
Tools.new
rescue NoMethodError => e
puts "Cannot instantiate: #{e.message}"
end整合运用
模块用于组织和共享代码:
- 使用
self.method定义可调用的模块函数。 - 保存通过
::访问的常量。 - 为类设置命名空间,以防止名称冲突。
- 您不能将模块实例化。
module Geometry
PI = 3.14159
def self.circle_area(r)
PI * r * r
end
end
puts Geometry.circle_area(2)快速检查
测试您对模块的理解。
回顾
您学习了如何定义模块:
- 模块用于组织方法和常量。
self.method定义可调用的模块函数。::用于访问常量和嵌套类。- 命名空间可以防止名称冲突。
module Util
def self.shout(s)
s.upcase + "!"
end
end
puts Util.shout("ruby")常见问题解答
「定义模块」课时是免费的吗?
是的 — 「定义模块」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。
「定义模块」这节课中我会学到什么?
命名空间与方法 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ruby Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「定义模块」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ruby Academy 课中编写并运行代码吗?
能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。