运行此代码

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

为什么在Ruby1.8.7上这会变成现实呢?

最佳答案

一点原始考古学表明originally the class was named TCPsocket(小写s)后来是renamed to TCPSocket(大写s),但用旧名称设置了一个常量Ruby1.8.7就是这样,所以对于那个版本,TCPsocketTCPSocket引用同一个类,所以可以比较为相等。
稍后仍然是original name was removed,只剩下TCPSocket这是1.9以后的情况,因此在最新版本中使用TCPsocket将导致uninitialized constant错误。
至于原因,我想Matz最初使用的是TCPsocket,后来意识到TCPSocket是一个更好的名称,但为了兼容,它保留了一段时间的旧名称。

09-25 17:54