ボクココ

個人開発に関するテックブログ

instance_eval と class_eval

にしても難解なRuby。これを理解するのに本を何度も読み直さないとわからない。
自分なりのメモなので間違っているかもしれませんがその時は指摘してくれるとうれしいです。

instance_eval


obj.instance_eval do
#そのオブジェクトのクラス定義のコンテキストで実行したいものを書く。
 #ここに書けばクラス定義内で使われているインスタンス変数も使えちゃう!
 #このブロックの外側に定義されている変数も使うことができる。
end

class_eval


klass.class_eval do
#この中はクラスを再オープンするのと似ている。
#インスタンスメソッドを定義したりできる。
#これもブロック外側の変数を使える
end

instance_eval, class_eval共に
「self (オブジェクトなりクラスなり)に変更を加える。」
でもclass_eval には
「クラス全体にも変更を加える」
という意味がある。
この違いで使い分けるらしい。



さて次は最も意味不明な「特異メソッド、特異クラス」だ。。

後記

なんとinstance_evalにもメソッド定義ができるらしい。 その時はそのメソッドはオブジェクトの特異メソッドとなる。