为什么TCPsocket在ruby 1.8.7中工作

chr*_*man 1 ruby tcpsocket

运行此代码

rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"
Run Code Online (Sandbox Code Playgroud)

为什么在ruby 1.8.7上这是真的吗?

mat*_*att 5

一些源考古学显示最初的类被命名TCPsocket(小写s).后来它被重命名为TCPSocket(大写s),但是使用旧名称设置了一个常量.这是Ruby 1.8.7中的情况,因此对于该版本TCPsocketTCPSocket引用相同的类,因此将比较相等.

后来仍然删除原来的名字,只留下了TCPSocket.从1.9开始就是这种情况,因此在最近的版本中使用TCPsocket会导致uninitialized constant错误.

至于为什么,我猜Matz最初使用TCPsocket并后来意识到这TCPSocket是一个更好的名字,但为了兼容性而保留旧名称一段时间.