0Pricing
Ruby Academy · 课时

定义模块

命名空间与方法

定义模块 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义模块
  2. include 与 extend
  3. Comparable 与 Enumerable
  4. prepend 与方法解析
← 返回 Ruby Academy