Advanced Ruby: metaclasses
Advance Ruby: metaclasses
Each object in Ruby has a hidden class. Even classes in Ruby, that are also objects, have a hidden class associated.
class Person
def name(n)
@name = n
end
end
thisjs = Person.new # => :name
thisjs.class # => Person
thisjs.singleton_class # => #<Class:#<Person:0x00007f9c8fb302a8>>
You can add methods to the metaclass of an instance with:
juan = Person.new
juan.name("Juan")
def juan.last_name
"Perez"
end
juan.last_name # => "Perez"
tom = Person.new
tom.last_name # => NoMethodError (undefined method `last_name' for #<Person:0x00007f9c8f085650>)
Adding a method to the metaclass of an object doesn’t add that method to the class of that object.