> 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 ----------------------------------------------------------------