2011年9月 9日
Ruby: 既存クラスにメソッドを追加、class_evalとsingleton method
Rubyのクラスにメソッドを追加する方法です。ここではStringを例にしました。
solution_1.rbはOpen Classというテクニックです。classキーワードで既存クラスを定義するときは上書きするのではなく、拡張した感じで、他のStringメソッドに影響がないです。
solution_2.rbはただclass_evalの理論を試したかっただけです。class_evalはスコープ内のselfとcurrent classをreceiverのStringクラスに変更するんです。だからclass_evalのブロック内に定義したメソッドはStringのinstance methodになります。
solution_mistake.rbはStringのクラスメソッド(Singleton methods)を定義したもので、instance methodではないです。
最近「Metaprogramming Ruby」という本を読んでます。よくわからなかったこととか、曖昧だっだことがすっきりした感じです。お勧めです!