【发布时间】:2015-02-26 19:39:50
【问题描述】:
运行这段代码
rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"
为什么在 ruby 1.8.7 上这又是真的?
【问题讨论】:
运行这段代码
rvm 1.8.7,1.9.3-p547 do ruby -r socket -e "puts TCPSocket == TCPsocket"
为什么在 ruby 1.8.7 上这又是真的?
【问题讨论】:
一点源考古表明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是一个更好的名称,但为了兼容,暂时保留了旧名称。
【讨论】: