Lesson 15 of 15

Modules

Modules in Ruby

A module is a collection of methods and constants that can be mixed into classes. Unlike classes, modules cannot be instantiated directly.

Modules as Mixins

Use include to add a module's methods to a class:

module Greetable
  def greet
    "Hello, I'm #{name}!"
  end
end

class Person
  include Greetable
  attr_reader :name

  def initialize(name)
    @name = name
  end
end

alice = Person.new("Alice")
puts alice.greet   # Hello, I'm Alice!

The module's method greet can call name because it will be mixed into classes that define it.

Namespacing

Modules also serve as namespaces to organize related code:

module MathUtils
  PI = 3.14159

  def self.circle_area(r)
    PI * r ** 2
  end
end

puts MathUtils::PI                # 3.14159
puts MathUtils.circle_area(5)    # 78.53975

Multiple Mixins

A class can include multiple modules:

module Swimmable
  def swim; "swimming!"; end
end

module Flyable
  def fly; "flying!"; end
end

class Duck
  include Swimmable
  include Flyable
end

d = Duck.new
puts d.swim   # swimming!
puts d.fly    # flying!

Your Task

Create a module Describable with a method describe that returns "#{self.class}: #{name}".

Create a class Animal that includes Describable, has attr_reader :name, and an initialize(name) method.

Create a variable cat set to Animal.new("Whiskers") and print cat.describe.

ruby.wasm loading...
Loading...
Click "Run" to execute your code.