1

このコードを実行します

rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"

ruby 1.8.7 でこれが true に戻るのはなぜですか?

4

1 に答える 1

5

ソース考古学のビットは、もともとクラスがTCPsocket(小文字でs)命名されたことを示しています。後に(大文字の) に名前が変更TCPSocketsされましたが、古い名前で定数が設定されました。これは Ruby 1.8.7 の場合で、そのバージョンTCPsocketTCPSocketは と は同じクラスを参照しているため、同等と見なされます。

その後、元の名前は削除され、 だけが残りましたTCPSocket。これは 1.9 以降のケースで、最近のバージョンで使用TCPsocketするとuninitialized constantエラーになります。

理由については、Matz が最初に使用していたものと思われますがTCPsocket、後にその方が適切な名前であることに気付きましたTCPSocketが、互換性のためにしばらくの間、古い名前を使用できるようにしました。

于 2015-02-26T22:41:27.960 に答える