1

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?

4

1 回答 1

5

一点源考古表明,最初该类被命名TCPsocket(小写s)。后来它被重命名为TCPSocket(大写s),但用旧名称设置了一个常量。在 Ruby 1.8.7 中就是这种情况,因此对于该版本TCPsocketTCPSocket引用相同的类,因此会比较相等。

后来还是把原来的名字去掉了,只剩下了TCPSocket。从 1.9 开始就是这种情况,因此在最近的版本中使用TCPsocket会导致uninitialized constant错误。

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

于 2015-02-26T22:41:27.960 回答