Używam case
składni Ruby założyć jakąś prostą logikę opartą na self.class
następująco:Dlaczego self.class === MyClass zwraca false, a self.class == MyClass zwraca wartość true?
case self.class
when FirstClass
do stuff....
when SecondClass
do other stuff...
end
Szybko zrozumiałem, to zawsze wraca nil.
Po bliższym badaniu, stwierdziliśmy, że case
wykorzystuje ===
zamiast ==
sprawdzić równość. Po uruchomieniu self.class == FirstClass
w moim terminalu otrzymuję true
zgodnie z oczekiwaniami, jednak self.class === FirstClass
zwraca false
.
Patrząc docs rubinowe, znalazłem following explanation z ===
:
Case Równości - dla klasy Object, skutecznie takie same jak zawijających # ==, ale zazwyczaj przesłonięta przez potomków, aby zapewnić znaczące semantyki w instrukcjach case.
Czy ktokolwiek może rzucić nieco światła na to, co się dzieje? Z góry dziękuję.
Nie było to dla mnie pouczające, ale klasa opuściła moduł, którego === impl jest tutaj: http://ruby-doc.org/core-2.2.0/Module.html#3D -3D-3D-metoda –
http://stackoverflow.com/questions/4467538/what-does-the-operator-do-in-ruby – Dreamweaver
http://truffles.me.uk/rubys-equality-operator – oobivat