Skip to content

Instantly share code, notes, and snippets.

@dnovais
Last active December 28, 2021 01:58
Show Gist options
  • Save dnovais/5b7cffff15d5e3db03ecb8647d4026d4 to your computer and use it in GitHub Desktop.
Save dnovais/5b7cffff15d5e3db03ecb8647d4026d4 to your computer and use it in GitHub Desktop.
Ruby - Diferença entre == e ===

== - "igualdade" genérica

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 ==.

=== - igualdade de casos

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment