File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Ruby and the fly likes How is metaprogramming in Ruby better? Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Languages » Ruby
Bookmark "How is metaprogramming in Ruby better?" Watch "How is metaprogramming in Ruby better?" New topic

How is metaprogramming in Ruby better?

Joseph Rose

Joined: Feb 02, 2010
Posts: 2

I have recently picked up an interest in Ruby and I am curious to learn about metaprogramming. What makes it different then regular programming practices?

Katrina Owen

Joined: Nov 03, 2006
Posts: 1367
Better? It does seem that asking which is better is a bit like you are comparing raspberries and steak. Both are great, useful, and healthy, but have different (and perhaps complimentary) uses. I don't think I'd want to choose one or the other exclusively.
Paolo Perrotta

Joined: Mar 27, 2010
Posts: 27
It's difficult to explain how metaprogramming works and how it's useful in just a few sentences (unless you already know about it, and then it feels very easy and natural).
Instead, I can point you to the Introduction chapter from Metaprogramming Ruby. You can download it freely here: .

Paolo Perrotta, Europe
Author of Metaprogramming Ruby
David Newton

Joined: Sep 29, 2008
Posts: 12617

Metaprogramming is programming about programming: it's code that writes code, but in a different way than compile-time generation like most Java code generation. Because Ruby is highly dynamic, things like getters and setters can be written by a method that writes additional methods:This ends up generating a class that looks like this:A trivial example, yes, but it's important to understand when and how this is happening. This allows very simple programmatic generation of instance methods *at runtime*. Now think about something like this:Now, with an absolute minimum of intrusiveness, we've defined some instance requirements, at runtime, in code, using a mini-validation DSL. validates_presence_of and validates_length_of are methods that generate behavior.

One thing I worked on was a test framework for web pages. Driving Selenium, I was able to code and test pages like this:

Like Lisp macros, metaprogramming can be difficult to explain, but the power and clarity it can provide is *huge*.
I agree. Here's the link:
subject: How is metaprogramming in Ruby better?
It's not a secret anymore!