> There is no preprocessor for Ruby.
>
> Farrel's suggestion (metaprogramming with attr_accessor) is
> the right one.

Yep, you're right. But he wants to know how to do it himself.
He wants to understand Why [1]... ;]

gegroet,
Erik V. - http://www.erikveen.dds.nl/

 [1] http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html

PS: Beer, downtown Amsterdam, tonight. No pancakes.

----------------------------------------------------------------

 ## Abstraction through meta-programming

 ## Getters and Setters - A Demo

 # Consider this code:

 class Foo
   def bar
     @bar
   end

   def bar=(new_bar)
     @bar = new_bar
   end
 end

 # This can be rewritten to this:

 class Foo
   def self.getter(iv)
     define_method("#{iv}") do
       instance_variable_get("@#{iv}")
     end
   end

   def self.setter(iv)
     define_method("#{iv}=") do |new_value|
       instance_variable_set("@#{iv}", new_value)
     end
   end

   getter :bar
   setter :bar
 end

 # Which can be rewritten to this:

 class Module
   def getter(iv)
     define_method("#{iv}") do
       instance_variable_get("@#{iv}")
     end
   end

   def setter(iv)
     define_method("#{iv}=") do |new_value|
       instance_variable_set("@#{iv}", new_value)
     end
   end
 end

 class Foo
   getter :bar
   setter :bar
 end

 # Which can be rewritten to this:

 require "getter_and_setter.rb"	# Fill it your self... ;]

 class Foo
   getter :bar
   setter :bar
 end

 # Use it:

 foo	= Foo.new
 foo.bar	= "Hello World!"
 puts foo.bar

----------------------------------------------------------------