Metaprogramming : define_method


Written by Gilang Mahardhika on 15 Jun 2013.

Dengan menggunekan define_method memungkinkan untuk membuat suatu method baru secara dinamis.

class Foo
 define_method("bar") do
  "bar"
 end
end

Foo.new.bar #return "bar"

define_method juga memungkinkan kita membuat suatu method baru dengan argumen

class Foo
 define_method("bar") do |argument|
  "bar and #{argument}"
 end
end

Foo.new.bar("foo") #return "bar and foo"

Juga memungkinkan membuat method yang lebih dinamis dengan array

class Foo
 ["one", "two", "three"].each do |number|
  define_method("print_#{number}") do |name|
   "This is number #{number}, #{name}"
  end
 end
end

Foo.new.print_one("John") #return "This is number one, John"
Foo.new.print_two("John") #return "This is number two, John"
Foo.new.print_three("John") #return "This is number three, John"

comments powered by Disqus