运行此代码
rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"
为什么在ruby 1.8.7上这会回归真实?
答案 0 :(得分:5)
一些源考古学显示originally the class was named TCPsocket
(小写s
)。后来它是renamed to TCPSocket
(大写s
),但是使用旧名称设置了一个常量。在Ruby 1.8.7中就是这种情况,因此对于那个版本TCPsocket
和TCPSocket
引用了同一个类,因此它将相等。
稍后仍为original name was removed,只留下TCPSocket
。从1.9开始就是这种情况,因此在使用TCPsocket
的最新版本中会导致uninitialized constant
错误。
至于为什么,我猜Matz最初使用TCPsocket
后来意识到TCPSocket
是一个更好的名字,但为了兼容性,将旧名称保留了一段时间。