- Read Tutorial
- Watch Guide Video
Now that you have gone through the introduction to metaprogramming guide let's see how to integrate it into a custom class in Ruby.
To start, let's create an empty
class Baseball end
If you instantiate it and call a method like this,
You'll get an error, and this is good because we don't have a method called
swing in the Baseball class.
In later lesson we'll walk through how to create methods on the fly, but for right now let's simply open the
Baseball class and add the method manually. For example:
class Baseball end class Baseball def swing "Homerun" end end p Baseball.new.swing
If you run this program, it returns the message
Homerun. This example shows the flexibility that Ruby offers when you want to reopen a class and make changes to it.
Since this is a basic example, it doesn't make much of a difference. But, if you have to do that in a large Ruby program with hundreds of files, then this type of flexibility is very beneficial.
Baseball class, we even have the ability to open it again to override the
swing method, like this:
class Baseball end class Baseball def swing "Homerun" end end p Baseball.new.swing # > Homerun class Baseball def swing "Strike" end end p Baseball.new.swing # > Strike
If you execute this method, the output of the second
swing call would be
Hope this gives you a good idea of metaprogramming in Ruby. This still only is focusing on opening and closing classes. In future guides we'll walk through how
method_missing works, which is the core component utilized in Ruby metaprogramming. With that being said, when it comes to day to day development I probably use the process of opening and closing classes more than any other metaprogramming tool.