Ruby の range は無限大を扱えるのか…

つらつらと ruby-talk などを眺めていてふと目に付いたこれで、

(0..(10.0/0)).member?(4)

るっ、Ruby は 0 で割っても例外をあげないのか、ってか、range は無限大を扱えるのか…とちょっと驚いて試してみる。

1/0          #=> error
1.0/0        #=> Infinity
0..(1.0/0)   #=> 0..Infinity

まあ、発端は 整数/整数 で分数も作れないヤツが生意気な(念のため、分数にならないのは、おそらく C 言語の int の挙動を模すという方針からくる仕様らしく、Ruby の機能的制約というわけではありません。require "mathn" すればできます)、と思ったところからなんで、とりたててどうこうってことはないんすけど、ね。

ところで、Squeak システムの Smalltalk ではどうなっているかと調べたら(調べないと分からないのかよ… orz)、こんなかんじでした。

1/0                    "=> error "
1.0/0                  "=> error "
Float infinity         "=> Infinity "
1 to: Float infinity   "=> (1 to: Infinity) "
(1 to: Float infinity) includes: 4   "=> true "