特異メソッド

Integerの+を書き換えようとしたが、挙動が変化しない。たぶんパフォーマンスの改善のためにIntegerの+は上書きできないようにしているのかなと思うけど、例外とか飛ばないのか〜〜??

>> class Array
>>   def +(x)
>>     0
>>   end
>> end
=> nil
>> [] + 1
=> 0

>> class Integer
>>   def +(x)
>>     0
>>   end
>> end
=> nil
>> 1 + 2
=> 3

おまけ:irbの動いているインタプリタ自体のクラスを書き換えるので、内容によってはirb自体が落ちる。

>> class String
>>   def +(x)
>>     0
>>   end
>> end
=> nil
>> "hoge" + 1
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/irb/ruby-lex.rb:191:in `buf_input': private method `split' called for 0:Fixnum (NoMethodError)
(irb死亡)
        • -

追記、Integerを継承したFixnumでまた+が定義されているのでIntegerで書き換えてもまた上書きされてしまうだけか。