The self keyword helps you know which object is currently running the code. It points to the current object.
When you want to call a method on the current object inside a class.
When you want to refer to the current object to set or get its attributes.
When you want to define class methods instead of instance methods.
When you want to clarify that a method belongs to the current object to avoid confusion.
When you want to return the current object from a method.
Syntax
Ruby
self
self always points to the object that is running the current method or code.
Inside instance methods, self is the instance (object) itself.
Examples
This prints the current object p because self inside who_am_i is the instance.
Ruby
class Person
def who_am_i
putsselfendendp = Person.newp.who_am_i
Here, self is the class itself, so this defines a class method.
Ruby
class Person
defself.describe
puts"I am a Person class"endend
Person.describe
Using self.name= calls the setter method for name on the current object.
Ruby
class Person
attr_accessor :name
definitialize(name)
self.name = name # Using self to call setter methodendendp = Person.new("Alice")
putsp.name
Sample Program
This program shows how self works inside instance methods and class methods.
Ruby
class Car
attr_accessor :color
definitialize(color)
self.color = color
enddef show_self
puts"This car is: #{self.color}"puts"Self is: #{self}"enddefself.info
puts"Cars have wheels"puts"Self inside class method is: #{self}"endend
car = Car.new("red")
car.show_self
Car.info
OutputSuccess
Important Notes
Inside instance methods, self is the object you created from the class.
Inside class methods (defined with self.method_name), self is the class itself.
Using self helps Ruby know you want to call a method or set a value on the current object, not create a local variable.
Summary
self points to the current object running the code.
Inside instance methods, self is the instance (object).
Inside class methods, self is the class itself.
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
Step 1: Understand instance methods context
Inside an instance method, the code runs for a specific object created from the class.
Step 2: Identify what self points to
In this context, self refers to that specific object (instance) running the method.
Final Answer:
The current instance (object) of the class -> Option D
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
Step 1: Recall class method syntax
Class methods are defined by prefixing the method name with self. inside the class.
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.
Final Answer:
def self.my_method; 'hello'; end -> Option A
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
Step 1: Understand what self is inside speak
Inside the instance method speak, self is the instance fido.
Step 2: Evaluate self.class
Calling class on the instance returns its class, which is Dog.
Final Answer:
Dog -> Option A
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
This is a class method trying to call meow without specifying an instance.
Step 2: Understand method types
meow without self. is an instance method, so it needs an object to call it on.
Step 3: Identify the error
Calling an instance method directly inside a class method causes a NoMethodError because no instance is given.
Final Answer:
Calling instance method meow inside a class method without an instance -> Option B
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