かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

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

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