Blog - .NET, ASP.NET, AJAX, Ruby and more
  • Google Banner 2

Ruby Beauty – Dynamically Invoking Methods

Continuing with my exploration of Ruby as a .NET guy, here’s another example of Ruby’s expressive syntax in action.  I decided to add bite size snippets of some of the cool things I encountered in Ruby and Rails.  If you are interested in others, see my other Ruby posts.

Within the context of Ruby, you can call a method in one of two ways.  The first, and most frequently used, is the standard “dot” notation.  Take the following class:

class SampleClass
    def say_hello(name)
        puts "Hello #{name}"
    end
end

To then call that method:

obj = SampleClass.new
obj.say_hello('Damien')

This works fine for things you know about, but what if you wanted to call a method dynamically at runtime? 

Using the same SampleClass example, we can also do the following:

obj = SampleClass.new
obj.send(:say_hello, 'Damien')

By using Ruby’s send method, we can pass the name of the method as a symbol and an array of arguments.  So in this example, we want to call the say_hello method, passing the argument of “Damien.”  You could also use a string in the place of the symbol used in the last example:

obj = SampleClass.new
obj.send('say_hello', 'Damien')

This is most often used in metaprogramming.  Continuing with my exploration of Ruby (and Rails), I got sucked into metaprogramming thanks to Metaprogramming Ruby (Facets of Ruby) from The Pragmatic Bookshelf.  All it took was the sample chapter and I was hooked.  I started reading the Kindle version of the book and so far it’s fantastic.

Of course, you can do this in .NET as well, but Reflection just isn’t really pretty.  Although C# 4.0’s dynamic feature is a thing of beauty.  Hooray for the DLR.

This entry was posted in Ruby and tagged . Bookmark the permalink. Both comments and trackbacks are currently closed.

Damien White is a developer in Connecticut that simply loves coding. Ever since he was young, he has had a driving passion for computers and software development, and a thirst for knowledge that just cannot be quenched. He’s happy to share what he knows in his quest to learn as much as possible.