ruby metaprogramming 0

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



ruby metaprogramming 0_第1张图片


BasicObject >> Object  >> Module >> Class >> Fixnum << Integer << Numeric << Object <

你可能感兴趣的:(ruby,metaprogramming,ruby)