Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
is_a?, kind_of?, i instance_of? w Ruby sprawdzają typ obiektu, ale z różną głębokością.
is_a? i kind_of?
One są równoważne - obie sprawdzają, czy obiekt jest instancją danego klasy lub jego potomka.
class Animal; end class Dog < Animal; end dog = Dog.new dog.is_a?(Dog) # true dog.is_a?(Animal) # true - ponieważ Dog < Animal dog.kind_of?(Animal) # true - to samo
instance_of?
Sprawdza dokładną klasę, bez dziedziczenia.
dog.instance_of?(Dog) # true dog.instance_of?(Animal) # false — ponieważ to potomek, nie sama klasa
Krótko mówiąc:
is_a? i kind_of? - sprawdzają w łańcuchu dziedziczenia
instance_of? - sprawdza tylko konkretną klasę
Ten post nie ma jeszcze żadnych dodatków od autora.