Ruby ==, eql? , === 核心类 Override 一览表

mingyuan0715 · 2018年05月05日 · 最后由 teddy_1004 回复于 2018年05月07日 · 1448 次阅读

基本知识可参考社区多篇文章:https://ruby-china.org/topics/20334

  • 只检查类本身是否有 Override,有些类的父类做了 Override 了的;
  • Module/Symbol虽然有Override ==方法,但是代码跟 BasicObject 的一样,可认为没有 Override;
  • Range 中的 ===并不完全等于 include?, 参数处理上略有差异;
Class/Module Override == Override eql? (Same as ==) Override === (Same as ==)
Array √(×) ×
Hash √(√) ×
Range √(×) √(include?
Comparable × ×
Exception × ×
Numeric × x
Complex × ×
Float √(×) √(√)
Integer × √(√)
Rational × ×
MatchData √(√) ×
Method √(√) √(call
Proc x x √(call
Module ×
Random × ×
Regexp √(√) √(×)
String √(×) √(√)
Struct √(×) ×
Symbol x x x
FalseClass x x
TrueClass x x
NilClass x x

纯体力活,每一个我都点开 c 实现源码看了。很多文章说 eql可认为是 == 的别名,大部分类有差异的。

lithium4010 回复

其实这个文章应该更深入一点,可以详细阐述下 每个核心类的 == 使用和 与 其他相等方法的差异。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号