PerlerのRuby日記

Rubyとか

クラスを再オープンすると元のインスタンスも影響を受ける

# クラスを作る
1.9.3-p194 :001 > class Hoge
1.9.3-p194 :002?>   def hoge
1.9.3-p194 :003?>     "hoge-----!!!!"
1.9.3-p194 :004?>     end
1.9.3-p194 :005?>   alias :fuga :hoge
1.9.3-p194 :006?>   end
 => nil 

# インスタンスを作る
1.9.3-p194 :007 > h = Hoge.new
 => #<Hoge:0x007fe471182f10> 
1.9.3-p194 :008 > h.hoge
 => "hoge-----!!!!" 
1.9.3-p194 :009 > h.fuga
 => "hoge-----!!!!" 

# クラス再オープン
1.9.3-p194 :010 > class Hoge
1.9.3-p194 :011?>   undef :hoge
1.9.3-p194 :012?>   end
 => nil 

# 先に作ったインスタンスも影響を受ける
1.9.3-p194 :013 > h.hoge
NoMethodError: undefined method `hoge' for #<Hoge:0x007fe471182f10>
	from (irb):13
	from /Users/rightgo09/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
1.9.3-p194 :014 > h.fuga
 => "hoge-----!!!!" 

ちゃんとメソッドコールの都度クラス内を確認してるんだなー。