This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Metaprogramming with String Evaluations
CodeExpectedActual
class Numeric
 [['add', '+'], ['subtract', '-'], 
  ['multiply', '*',], ['divide', '/']].each do |method, operator|
    define_method("#{method}_2") do
      method(operator).call(2)
    end
  end
end
class Numeric
  [['add', '+'], ['subtract', '-'], 
   ['multiply', '*',], ['divide', '/']].each do |method, operator|
    module_eval %{ def #{method}_2
                     self #{operator} 2
                   end }
  end
end
4.add_2
6 6
10.divide_2
5 5
class String
  def last(n)
    self[-n, n]
  end
end
"Here's a string.".last(7)
"string." "string."
class String
  define_method('last') do |n|
   self[-n, n]
  end
end
"Here's a string.".last(7)
"string." "string."
class String
  module_eval %{def last(n)
                  self[-n, n]
                end}
end
"Here's a string.".last(7)
"string." "string."
String.module_eval %{def last(n)
                       self[-n, n]
                     end}
"Here's a string.".last(7)
"string." "string."
class String
  eval %{def last(n)
           self[-n, n]
         end}
end
"Here's a string.".last(7)
"string." "string."