Ruby has three types of objects:
Each object has a class which contains its methods:
class Example end object = Example.new object.class # => Example Example.class # => Class Class.class # => Class
Objects themselves can't contain methods, only their class can. But with singleton classes, it is possible to add methods to any object including other singleton classes.
def object.foo :foo end object.foo #=> :foo
foo is defined on singleton class of
Example instances can not reply to
Ruby creates singleton classes on demand. Accessing them or adding methods to them forces Ruby to create them.