Bird
Raised Fist0
Rubyprogramming~20 mins

Self keyword behavior in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Self Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of self inside instance method
What is the output of this Ruby code?
Ruby
class Person
  def initialize(name)
    @name = name
  end

  def show_self
    puts self
  end
end

p = Person.new("Alice")
p.show_self
AAlice
B#<Person:0x00007fffe30b8c10>
CPerson
Dself
Attempts:
2 left
💡 Hint
Inside an instance method, self refers to the current object instance.
❓ Predict Output
intermediate
2:00remaining
Output of self inside class method
What will this Ruby code print?
Ruby
class Car
  def self.show_self
    puts self
  end
end

Car.show_self
ACar
B#<Car:0x00007fffe30b8c10>
CObject
Dself
Attempts:
2 left
💡 Hint
Inside a class method, self refers to the class itself.
🔧 Debug
advanced
2:30remaining
Why does this code raise an error?
This Ruby code raises an error. What is the cause?
Ruby
class Animal
  def self.describe
    puts "This is an animal"
    puts self.name
  end

  def name
    "Generic Animal"
  end
end

Animal.describe
Aself.name calls a class method 'name' which is not defined, causing NoMethodError
BInstance method 'name' is called correctly, no error
CSyntax error due to missing 'end' keyword
Dself refers to an instance, but no instance exists
Attempts:
2 left
💡 Hint
Check if 'name' is defined as a class method or instance method.
🧠 Conceptual
advanced
2:00remaining
Meaning of self in module method
In Ruby, inside a module method defined with def self.method_name, what does self refer to?
AThe class that includes the module
BAn instance of the module
CThe module object itself
DThe main Object
Attempts:
2 left
💡 Hint
Modules are objects too in Ruby.
❓ Predict Output
expert
3:00remaining
Output of self in nested context
What does this Ruby code print?
Ruby
class Outer
  def self.show
    puts self
    class Inner
      def self.show_inner
        puts self
      end
    end
    Inner.show_inner
  end
end

Outer.show
A
Outer::Inner
Outer
B
Outer
Inner
C
Outer
self
D
Outer
Outer::Inner
Attempts:
2 left
💡 Hint
Check what self refers to in each class method.

Practice

(1/5)
1. What does the self keyword represent inside an instance method in Ruby?
easy
A. The superclass of the current class
B. The class itself
C. A global variable
D. The current instance (object) of the class

Solution

  1. Step 1: Understand instance methods context

    Inside an instance method, the code runs for a specific object created from the class.
  2. Step 2: Identify what self points to

    In this context, self refers to that specific object (instance) running the method.
  3. Final Answer:

    The current instance (object) of the class -> Option D
  4. Quick Check:

    self in instance method = instance [OK]
Hint: Inside instance methods, think "self" means the object itself [OK]
Common Mistakes:
  • Confusing self with the class inside instance methods
  • Thinking self is a global or class variable
  • Assuming self is always the class
2. Which of the following is the correct way to define a class method using self in Ruby?
easy
A. def self.my_method; 'hello'; end
B. def my_method.self; 'hello'; end
C. def my_method(self); 'hello'; end
D. def self:my_method; 'hello'; end

Solution

  1. Step 1: Recall class method syntax

    Class methods are defined by prefixing the method name with self. inside the class.
  2. Step 2: Check each option's syntax

    def self.my_method; 'hello'; end uses def self.my_method which is correct syntax. Others are invalid Ruby syntax.
  3. Final Answer:

    def self.my_method; 'hello'; end -> Option A
  4. Quick Check:

    Class method syntax = def self.method_name [OK]
Hint: Class methods start with def self.method_name [OK]
Common Mistakes:
  • Placing self after method name
  • Using colon instead of dot
  • Passing self as a parameter
3. What will be the output of the following Ruby code?
class Dog
  def speak
    self.class
  end
end

fido = Dog.new
puts fido.speak
medium
A. Dog
B. #
C. fido
D. Object

Solution

  1. Step 1: Understand what self is inside speak

    Inside the instance method speak, self is the instance fido.
  2. Step 2: Evaluate self.class

    Calling class on the instance returns its class, which is Dog.
  3. Final Answer:

    Dog -> Option A
  4. Quick Check:

    self.class in instance method = class name [OK]
Hint: self.class inside instance method returns the object's class [OK]
Common Mistakes:
  • Thinking self.class returns the instance
  • Confusing class with object name
  • Expecting output to be an object instead of class name
4. Identify the error in this Ruby code snippet:
class Cat
  def self.meow
    puts "Meow!"
  end

  def meow
    puts "Meow from instance"
  end

  def self.instance_meow
    meow
  end
end

Cat.instance_meow
medium
A. Missing self in instance method definition
B. Calling instance method meow inside a class method without an instance
C. Incorrect syntax for class method definition
D. Using puts inside methods is not allowed

Solution

  1. Step 1: Analyze method calls inside self.instance_meow

    This is a class method trying to call meow without specifying an instance.
  2. Step 2: Understand method types

    meow without self. is an instance method, so it needs an object to call it on.
  3. Step 3: Identify the error

    Calling an instance method directly inside a class method causes a NoMethodError because no instance is given.
  4. Final Answer:

    Calling instance method meow inside a class method without an instance -> Option B
  5. Quick Check:

    Class methods cannot call instance methods without an object [OK]
Hint: Class methods need an instance to call instance methods [OK]
Common Mistakes:
  • Trying to call instance methods directly inside class methods
  • Confusing self in class vs instance methods
  • Ignoring need for object to call instance methods
5. Given the following Ruby code, what will be the output?
class Calculator
  def self.description
    "I am a Calculator"
  end

  def initialize(value)
    @value = value
  end

  def show_description
    self.class.description
  end
end

calc = Calculator.new(10)
puts calc.show_description
hard
A. NoMethodError
B. "Calculator"
C. "I am a Calculator"
D. "10"

Solution

  1. Step 1: Understand self.class.description inside instance method

    Inside show_description, self is the instance calc. Calling class returns the class Calculator.
  2. Step 2: Call class method description

    Calling description on the class returns the string "I am a Calculator".
  3. Final Answer:

    "I am a Calculator" -> Option C
  4. Quick Check:

    Instance calls class method via self.class = output string [OK]
Hint: Use self.class to call class methods from instances [OK]
Common Mistakes:
  • Expecting instance variable value instead of class method output
  • Confusing self with class inside instance methods
  • Thinking NoMethodError will occur
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard