Run this code
rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"
Why on ruby 1.8.7 does this come back as true?
一点源考古表明,最初该类被命名TCPsocket
(小写s
)。后来它被重命名为TCPSocket
(大写s
),但用旧名称设置了一个常量。在 Ruby 1.8.7 中就是这种情况,因此对于该版本TCPsocket
并TCPSocket
引用相同的类,因此会比较相等。
后来还是把原来的名字去掉了,只剩下了TCPSocket
。从 1.9 开始就是这种情况,因此在最近的版本中使用TCPsocket
会导致uninitialized constant
错误。
至于为什么,我猜是 Matz 最初使用TCPsocket
,后来意识到这TCPSocket
是一个更好的名称,但为了兼容而将旧名称保留了一段时间。