Mam klasę, którą chcę porównać do obu łańcuchów i symboli w przypadku sprawy, więc pomyślałem, że po prostu przesłonię metodę ===() dla mojej klasy i wszystko będzie złote. Jednak moja metoda ===() nigdy nie jest wywoływana podczas instrukcji case. Jakieś pomysły?Jak przesłonić operatora równości rubinów? (===)
Oto przykład kodu, a co dzieje się w IRB sesji:
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 (main): 010: 0> a = A.new ("hi")
=> #
IRB (główny): 011: 0> to przypadku
IRB (główny): 012: 1> gdy "m", a następnie 1
IRB (główny): 013: 1> jeszcze 2
IRB (główny) : 014: 1> koniec
=> 2
(nie wypisuje komunikat i powinien zawsze zwracają prawdę tak) Zauważ, że idealnie chciałbym zrobić
def ===(other)
#puts "in ==="
return @x.===(other)
end
góry dziękuję.
cool. To wyjaśnia i działa! Czy ten sposób wykonywania spraw wydaje się sprzeczny z intuicją? – Marcin
Dobrze. Tak, to wydaje się trochę nieporządne, ale nie dałem wiele uwagi na tę odpowiedź. Prawdopodobnie możesz wymyślić jakąś bardziej zwięzłą składnię, lub możesz zrobić coś złego, np. Przesłonić operatora === w klasach, które chcesz mieć na LHS. – janm
Dzięki - mogę być trochę bardziej zwięzły, ale także sprawia, że myślę, że może używam niewłaściwego narzędzia (przypadku) do pracy, ale to działa, więc dziękuję (powinienem był o to poprosić wczoraj). – Marcin