かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

evalでクラス定義

たとえば、nameっていうプロパティを持ったクラスをいっぱい定義したいとすると…

def define_class *args
    args.each do |name|
        eval <<-E
            class #{name}
                attr_accessor :name
            end
        E
    end
end

こんなメソッドを用意しておいて

define_class(
    "Person", 
    "Departments", 
    "Employees")

person = Person.new
person.name = "Tarou"
puts person.name

d = Departments.new
d.name = "総務部"
puts d.name

e = Employees.new
e.name = "Jirou"
puts e.name

このように使う。
実行結果

Tarou
総務部
Jirou

うまく利用できれば楽しそう!!
だけどいい利用法を思いつかない。
トリッキーなだけの実装になりかねないので注意して使うようにしよう。