今日のるびみ。

死にそう >_<;;;;;;;;
そういえば珠玉のプログラミングという本を借りました!
全然Rubyじゃないけど ^-^;;;

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

珠玉のプログラミング―本質を見抜いたアルゴリズムとデータ構造

二つのeval

class Hoge
end

hoge = Hoge.new

add_method1 = %q{
def hoge
	puts "hoge1"
end
}
add_method2 = %q{
def hoge
	puts "hoge2"
end
}

Hoge.module_eval(add_method1)
hoge.hoge    #=> hoge1
hoge.instance_eval(add_method2)
hoge.hoge    #=> hoge2

意図した動作です ^-^

class Hoge
end

hoge = Hoge.new

add_method1 = %q{
def hoge
	puts "hoge1"
end
}
add_method2 = %q{
def hoge
	puts "hoge2"
end
}

hoge.instance_eval(add_method1)
hoge.hoge    #=> hoge1
Hoge.module_eval(add_method2)
hoge.hoge    #=> hoge1

え? ^-^;;;;;;



追記:さすがにここで終わると非常にまずい気がしたので追記 >_<;;;
instance_evalの場合は、インスタンスhogeの特異メソッド定義になります。
クラスHogeに同名のメソッドを定義しても、インスタンスhogeには特異メソッドが既にあるためにそちらが優先されるのだと思います ^-^

続・aliasの不思議

19:05 (she) あと undef の話は
19:05 (she) んーと結局プロトタイプベースだって話なんだけど
19:05 (she) undef は関数ポインタ消してるだけってのは正しくて
19:06 (she) で、 undef され尽くしたらメソッドの実装も消えるよ
19:06 (she) GC に回収されるはず
19:06 (she) alias したら複数個所から参照されてる状態になるわけですね

だそうです ^-^
めんどくさいのでそのまま引用しました ^-^;;;