最近、訳あって 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 にしてある。