Tengo una clase que quiero comparar con cadenas y símbolos en una declaración de caso, así que pensé que simplemente anularía el método ===() para mi clase y todo sería oro. Sin embargo, mi método ===() nunca se llama durante la declaración de caso. ¿Algunas ideas?¿Cómo anula el operador de igualdad de casos de ruby? (===)
Aquí es un código de ejemplo, y lo que sucede en una sesión de IRB:
class A
def initialize(x)
@x=x #note this isn't even required for this example
end
def ===(other)
puts "in ==="
return true
end
end
IRB (principal): 010: 0> a = A.new ("Hola")
=> #
IRB (principal): 011: 0> caso, un
IRB (principal): 012: 1> cuando "Hola" y luego 1
IRB (principal): 013: 1> else 2
IRB (principal) : 014: 1> end
=> 2
(nunca se imprime el mensaje y siempre debe devolver verdadero de todos modos) Nota que, idealmente, me gustaría hacer un
def ===(other)
#puts "in ==="
return @x.===(other)
end
Gracias de antemano.
fresca. Eso lo explica, ¡y funciona! ¿Esta forma de hacer declaraciones de casos parece contra intuitiva? – Marcin
Bueno. Sí, parece un poco desordenado, pero no le di mucha importancia a la sintaxis para esta respuesta. Probablemente pueda llegar a una sintaxis más concisa, o puede hacer algo malo como anular operador === en las clases que desea tener en el LHS. – janm
Gracias - Puedo ser un poco más conciso, pero también me hace pensar que tal vez estoy usando la herramienta incorrecta (estuche) para el trabajo, pero funciona, así que gracias (debería haberlo preguntado ayer). – Marcin