福嶋です。

OHARA Shigeki <os / iij.ad.jp> wrote:
> p 1.foo(5)	# (に) -> 5
> p 1.foo2	# (ほ) -> 5

> p "1".foo(5)	# (り) -> 5
> p "1".foo2	# (ぬ) -> nil
> 
> 
> (り)と(ぬ)の "1" は、それぞれ違うインスタンスなので一致しない、
> ということなのだろうと思いますが、
> (に)と(ほ)が一致する、というのがどうもわかりません。

Rubyでは Fixnum のインスタンスは各数について1つしか存在しないから
だと思います。つまり (に)と(ほ) は同じインスタンスだということに
なります。

irb(main):011:0> "1".equal? "1"
false
irb(main):012:0> 1.equal? 1
true

こうなっているのはインタプリタのパフォーマンスのためでしょう。
Bignum だと別のインスタンスになります。

irb(main):013:0> 1000000000000000000 ==     1000000000000000000
true
irb(main):014:0> 1000000000000000000.equal? 1000000000000000000
false

---
福嶋正機