- == 比较是否是同一个对象,可以被覆写
- equal? 比较是否是同一个对象,不能被覆写
- eql? 比较对象是否有相同的值
在写测试的时候发现,如果两个ActiveRecord对象有相同的类型,又有相同的id,则用==来做比较的话,得出的结果是true,即使它们的值不相同。可见ActiveRecord覆写了==方法。
例:
a = Account.create(:name => "aaa")
b = Account.create(:name => "bbb")
而因为不知名的原因,在测试的时候a与b有相同的id,即
a.id #=> 0
b.id #=> 0
于是
a == b #=> true #因为a与b类型相同,id相等,ActiveRecord就认为它们是同一个对象
a.equal?(b) #=> false #因为不是同一个对象
a.eql?(b) #=> false #因为值不相等
没有评论:
发表评论