Ho una classe che voglio confrontare sia con stringhe che con simboli in un'istruzione case, quindi ho pensato di scavalcare il metodo ===() per la mia classe e tutto sarebbe oro. Tuttavia il mio metodo ===() non viene mai chiamato durante la dichiarazione del caso. Qualche idea?Come si ignora l'operatore di uguaglianza caso rubino? (===)
Ecco qualche esempio di codice, e ciò che accade in una sessione 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 (principale): 010: 0> a = A.new ("ciao")
=> #
IRB (principale): 011: 0> caso un
IRB (principale): 012: 1> quando "hi" poi 1
IRB (principale): 013: 1> altro 2
IRB (principale) : 014: 1> fine
=> 2
(mai stampa il messaggio e dovrebbe sempre return true comunque) Nota che idealmente mi piacerebbe fare un
def ===(other)
#puts "in ==="
return @x.===(other)
end
Grazie in anticipo.
Cool. Questo lo spiega e funziona! Questo modo di fare le affermazioni del caso sembra controintuitivo? – Marcin
Buono. Sì, sembra un po 'complicato, ma non ho pensato molto alla sintassi per questa risposta. Probabilmente puoi trovare una sintassi più concisa, oppure puoi fare qualcosa di male come l'operatore override === nelle classi che vuoi avere sul LHS. – janm
Grazie - Posso essere un po 'più conciso, ma mi fa anche pensare che forse sto usando lo strumento sbagliato (caso) per il lavoro, ma funziona, quindi grazie (avrei dovuto chiederlo ieri). – Marcin