にしても難解なRuby。これを理解するのに本を何度も読み直さないとわからない。
自分なりのメモなので間違っているかもしれませんがその時は指摘してくれるとうれしいです。
instance_eval
obj.instance_eval do
#そのオブジェクトのクラス定義のコンテキストで実行したいものを書く。
#ここに書けばクラス定義内で使われているインスタンス変数も使えちゃう!
#このブロックの外側に定義されている変数も使うことができる。
end
class_eval
klass.class_eval do
#この中はクラスを再オープンするのと似ている。
#インスタンスメソッドを定義したりできる。
#これもブロック外側の変数を使える
end
instance_eval, class_eval共に
「self (オブジェクトなりクラスなり)に変更を加える。」
でもclass_eval には
「クラス全体にも変更を加える」
という意味がある。
この違いで使い分けるらしい。
さて次は最も意味不明な「特異メソッド、特異クラス」だ。。