No nível do objeto, ==
retorna true somente se obje otherfor o mesmo objeto. Normalmente, esse método é substituído nas classes descendentes para fornecer significado específico à classe.
Essa é a comparação mais comum e, portanto, o local mais fundamental onde você (como autor de uma classe) decide se dois objetos são "iguais" ou não.
eql?
- é sinomido do ==
.
Para a classe Object, efetivamente o mesmo que chamar #==
, mas geralmente substituído por descendentes para fornecer semântica significativa nas instruções de caso.
Isso é incrivelmente útil. Exemplos de coisas que têm ===
implementações interessantes :
Alcance Regex Proc (em Ruby 1.9) Então você pode fazer coisas como:
case some_object
when /a regex/
# The regex matches
when 2..4
# some_object is in the range 2..4
when lambda {|x| some_crazy_custom_predicate }
# the lambda returned true
end