¿Cuál es la diferencia entre == y ===? ¿Cuál deberías usar cuando?Operadores de comparación Ruby? == vs. ===
Respuesta
==
se utiliza para la igualdad en las sentencias condicionales como if
, unless
, etc. ===
se utiliza para determinar la igualdad en case
declaraciones.
Como ejemplo, 10 no es igual a 1..20, pero está dentro de ese rango. Por lo que es posible que desee poner el rango en su declaración de caso y hacer que se seleccione. Además, tenga en cuenta que las sentencias de caso se traducen en b === a en sentencias como 'case a when b then true end' –
Ambos son solo métodos llamados objetos. Esto significa que los objetos deciden qué significa qué. Sin embargo, hay convenciones en Ruby sobre cómo son diferentes. Por lo general, ==
es más estricto que ===
- a === b
casi es siempre cierto si a == b
es. El mejor lugar para leer sobre esto es http://ruby-doc.org/core/classes/Object.html. Desplácese hacia abajo a las diferentes secciones sobre ==
y ===
. Estas son algunas de las convenciones que conozco:
==
, cuando se aplica a la llanuraObject
s, sólo será verdadera si uno es exactamente el mismo que el otro - si están almacenados en la ubicación misma memoria (esto es cómo funciona Ruby internamente). Sin embargo, si los argumentos son de tipos distintos de Object, este método será anulado.equal?
es como==
para plainObject
s, pero no será reemplazado por subclases.===
se utiliza para:- una alternativa
is_a?
, hacia atrás.String === 'str'
es cierto. - correspondencias recíprocas.
/s[at]r*/ === 'str'
es cierto.
- una alternativa
puede encontrar el significado específico de ===
para diversas clases en la documentación de esas clases, por ejemplo, la versión Range
es aquí (sinónimo de include?
): http://ruby-doc.org/core/classes/Range.html#M000691
Un buen ejemplo de anulación' == 'para que haga lo que (probablemente) espera sean cadenas. Compare '==' y '.equal' para un literal de cadena y una variable que apunta a la" misma "cadena. – Telemachus
- 1. Operadores de comparación de JavaScript: Identidad vs. Igualdad
- 2. 'Expresión regular' VS 'Operadores/funciones de comparación de cadenas'
- 3. JavaScript - === vs == operadores rendimiento
- 4. Operadores de comparación para cadenas de C
- 5. operadores de comparación preferidos de Python
- 6. Consulta de DynamoDB con operadores de comparación
- 7. Operadores de comparación binarios en tipos genéricos
- 8. gcc reverse_iterator operadores de comparación faltantes?
- 9. Operadores de comparación dinámica en PHP
- 10. - vs - = operadores con numpy
- 11. Los operadores de comparación que no trabajan (en vistas erb)
- 12. DateTime Comparación: DateTime.Compare() frente a operadores relacionales
- 13. Diferencias en operadores booleanos: & vs && y | vs ||
- 14. Operadores y métodos en Ruby
- 15. Comparación tripartita en ruby
- 16. Operadores integrales quot vs. div
- 17. Comparación Haskell vs. Prolog
- 18. comparación grok vs. django
- 19. Comparación PyQt vs PySide
- 20. Utilización de operadores de comparación fuera de los condicionales
- 21. Ruby - saltos de línea y los operadores
- 22. Operadores de comparación de mapas para llamar a la función
- 23. Columna de filtro jQuery DataTables con operadores de comparación
- 24. operadores de comparación Perl y "números" en cadena
- 25. Comparación: LINQ vs LAMBDA Expresión
- 26. RedirectToAction() vs. View() y los operadores ternarios?
- 27. Operadores vs Funciones en C/C++
- 28. Ruby vs. Ruby on Rails
- 29. Java vs. Comparación de velocidad de PHP
- 30. Comparación de rendimiento de Derby vs PostgreSql
Hay una muy sólida Responda a esto en [¿Cuál es la diferencia entre equal ?, eql ?, === y ==?] (http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –