RSpec: разница между "should ==..." и "should eql (...)"

В RSpec, какая разница между использованием should == ... и should eql(...)? Я заметил, что в документации RSpec всегда используется eql, но == меньше печатает и более легко читается. Что мне не хватает?

Ответ 1

Это довольно просто, действительно: should == отправляет сообщение == испытуемому, should eql отправляет сообщение eql? испытуемому. Другими словами: два разных теста отправляют два совершенно разных сообщения, которые вызывают два совершенно разных метода и, таким образом, делают две совершенно разные вещи. В частности, eql? более строгий, чем ==, но менее строгий, чем equals?.

Ответ 2

Они обычно эквивалентны, но не всегда:

1 ==   1.0 # => true
1.eql? 1.0 # => false