最近、訳あって Ruby 1.8.4 用のスクリプトを書いてるので、逃避というか釣られて考えた。
class A %w[hoge fuga].tap do |names| names.each do |name| (class << self; self; end).class_eval{attr_accessor name} attr_accessor name end define_method(:to_common) do names.each do |name| self.class.class_exec(instance_variable_get("@" + name)) do |i| instance_variable_set("@" + name, i) end end end end end
define_singleton_method はあるけど、singleton_class_eval はまだない。 instance_variable_{get|set} で @ 必須なのは、んー、やっぱりちょっと面倒だなぁ。 String#+ で済ませたいので、hoge や fuga は String にしてある。