class Person def initialize(name) @name = name end def show_self puts self end end p = Person.new("Alice") p.show_self
In Ruby, inside an instance method, self refers to the current object instance. Printing self shows the object's default string representation, which includes the class name and an object id.
class Car def self.show_self puts self end end Car.show_self
In Ruby, inside a class method, self refers to the class object. So printing self prints the class name.
class Animal def self.describe puts "This is an animal" puts self.name end def name "Generic Animal" end end Animal.describe
The method describe is a class method, so self inside it refers to the class Animal. The call self.name tries to call a class method name, but only an instance method name is defined. This causes a NoMethodError.
def self.method_name, what does self refer to?In Ruby, modules are objects of class Module. Inside a module method defined as def self.method_name, self refers to the module object itself.
class Outer def self.show puts self class Inner def self.show_inner puts self end end Inner.show_inner end end Outer.show
In Outer.show, self is Outer. Inside Inner.show_inner, self is Outer::Inner, the nested class's name.