このコードを実行します
rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"
ruby 1.8.7 でこれが true に戻るのはなぜですか?
ソース考古学のビットは、もともとクラスがTCPsocket
(小文字でs
)命名されたことを示しています。後に(大文字の) に名前が変更TCPSocket
s
されましたが、古い名前で定数が設定されました。これは Ruby 1.8.7 の場合で、そのバージョンTCPsocket
でTCPSocket
は と は同じクラスを参照しているため、同等と見なされます。
その後、元の名前は削除され、 だけが残りましたTCPSocket
。これは 1.9 以降のケースで、最近のバージョンで使用TCPsocket
するとuninitialized constant
エラーになります。
理由については、Matz が最初に使用していたものと思われますがTCPsocket
、後にその方が適切な名前であることに気付きましたTCPSocket
が、互換性のためにしばらくの間、古い名前を使用できるようにしました。