相关疑难解决方法(0)

equ?,eql?,===和==之间有什么区别?

我试图理解这四种方法之间的区别.我知道默认情况下==调用的方法equal?在两个操作数引用完全相同的对象时返回true.

===默认情况下也调用==哪个调用equal?...好吧,所以如果所有这三个方法都没有被覆盖,那么我猜 ===,==并且equal?做同样的事情?

现在来了eql?.这是做什么的(默认情况下)?它是否调用操作数的hash/id?

为什么Ruby有这么多的平等标志?他们应该在语义上有所不同吗?

ruby comparison equality operators

537
推荐指数
6
解决办法
20万
查看次数

如何测试(ActiveRecord)对象的相等性

Ruby 1.9.2on中Rails 3.0.3,我试图测试两个Friend(类继承自ActiveRecord::Base)对象之间的对象相等性.

对象相等,但测试失败:

Failure/Error: Friend.new(name: 'Bob').should eql(Friend.new(name: 'Bob'))

expected #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
     got #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>

(compared using eql?)
Run Code Online (Sandbox Code Playgroud)

只是为了笑容,我还测试了对象身份,它失败了,正如我所料:

Failure/Error: Friend.new(name: 'Bob').should equal(Friend.new(name: 'Bob'))

expected #<Friend:2190028040> => #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>
     got #<Friend:2190195380> => #<Friend id: nil, event_id: nil, name: 'Bob', created_at: nil, updated_at: nil>

Compared using …
Run Code Online (Sandbox Code Playgroud)

ruby activerecord identity equality ruby-on-rails

51
推荐指数
3
解决办法
3万
查看次数