動的なアクセサの追加
rubyでオブジェクトのプロパティに
Obj.propでアクセスするにはアクセサを定義すれば良いが、
そのアクセサを動的に定義したい。
要はActiveRecordのmodelのような事がしたいわけ。
具体的にはコンストラクタのパラメータにhashを与え、
hashが持つキー全てのアクセサを持ったクラスの作成。
調べると instance_eval を使えばいけそうだ。
実装
class MyClass def initialize(h = {}) @attr = h.dup h.keys.each do|prop| self.instance_eval %Q{ def #{prop.to_s} @attr["#{prop}".intern] || "" end def #{prop.to_s}=(arg) @attr["#{prop}".intern] = arg end } end end end