The keyword self in ruby gives you access to the current object
Class
In the context of a class self refers to the current class
class Dog
  p self # the Dog class
end
Defining a method on self creates a class method
Instance Method
Within an instance method self refers to the instance itself
class Dog
  def bark
    self
  end
end
p Dog.new.bark # an instance of the Dog class
Implicit Self
When you call a method without an explicit recieving object, the method is called implicitely on self. In plain english this means that if there is nothing on the left hand side of the function call then the left hand side is self.
class Person
  attr_reader :first_name, :last_name
  def initialize(first_name, last_name)
    @first_name = first_name
    @last_name = last_name
  end
  def full_name
    "#{first_name} #{last_name}" #implied self. Instance of person
  end
end
Top Level
At the top level self refers to the main ruby object
p self # the main object
Modules
When self is used within an instance method of a module it refers to the instance of the class in which the module is included
When you see self outside of an instance method inside a module it refers to the module
If you were wondering what p by itself is. Its a kernel method that behaves similar to obj.inspect. Try calling it on some objects :)
    
Top comments (0)