Resource: Metaprogramming in Ruby
Metaprogramming is giving your programs the ability to manipulate themselves at run time.
Names of classes in ruby are just constants.
Classes are objects of class Class. Class is object Class itself.
All objects can have methods which are instance methods of its class. So Classes can have methods which are methods of instance methods of Class.
We can insert methods to a object. So we can insert methods to object of Class.
But how class Class know what kind of methods you want in your own class? The answer is: When you define class method in your class or you insert methods to objects an anonymous class is created and inserted to the inheritance hierarchy as a container to hold the methods.
Everyone of the following patterns will makes ruby to create a anonymous for you.
# 1
class Rubyist
def self.who
"Geek"
end
end
# 2
class Rubyist
class << self
def who
"Geek"
end
end
end
# 3
class Rubyist
end
def Rubyist.who
"Geek"
end
#4
class Rubyist
end
Rubyist.instance_eval do
def who
"Geek"
end
end
puts Rubyist.who # => Geek
# 5
class << Rubyist
def who
"Geek"
end
end
BasicObject >> Object >> Module >> Class >> Fixnum << Integer << Numeric << Object <<BasicObject