Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
flag3 = n.is_a? Integer # trueflag4 = n.is_a? Numeric # trueflag5 = n.is_a? Object # trueflag6 = n.is_a? String # falseflag7 = n.is_a? Array # falseЯсно, что метод
kind_ofis_a?instance_of?Для новичков в Ruby приготовлен один сюрприз. Любой модуль, подмешиваемый в класс, становится субъектом отношения «является» для экземпляров этого класса. Например, в класс
ArrayEnumerablex = [1, 2, 3]flag8 = x.kind_of? Enumerable # trueflag9 = x.is_a? Enumerable # trueДля сравнения двух классов можно пользоваться также операторами сравнения. Интуитивно очевидно, что оператор «меньше» обозначает наследование суперклассу.
flag1 = Integer < Numeric # trueflag2 = Integer < Object # trueflag3 = Object == Array # falseflag4 = IO >= File # trueflag5 = Float < Integer # nilВ любом классе обычно определен оператор «тройного равенства»
===class === instanceinstanceclasscaseУпомянем еще метод
respond_torespond_to# Искать открытые методы.if wumpus.respond_to?(:bite) puts "У него есть зубы!"else puts "Давай-ка подразним его."end# Необязательный второй параметр позволяет# просматривать и закрытые методы.if woozle.respond_to?(:bite,true) puts "Вузлы кусаются!"else puts "Ага, это не кусающийся вузл."endИногда нужно знать, является ли данный класс непосредственным родителем объекта или класса. Ответ на этот вопрос дает метод
superclassClassarray_parent = Array.superclass # Objectfn_parent = 237.class.superclass # Integerobj_parent = Object.superclass # nilУ любого класса, кроме
Object11.1.7. Проверка объектов на равенство
Все животные равны, но некоторые равнее других.
При написании своих классов желательно, чтобы семантика типичных операций была такой же, как у встроенных в Ruby классов. Например, если объекты класса можно упорядочивать, то имеет смысл реализовать метод
<=>ComparableОднако картина перестает быть такой однозначной, когда дело доходит до проверки объектов на равенство. В Ruby объекты реализуют пять разных методов для этой операции. И в ваших классах придется реализовать хотя бы некоторые из них, поэтому рассмотрим этот вопрос подробнее.
Самым главным является метод
equal?ObjecttrueСамым распространенным способом проверки на равенство является старый добрый оператор
==Следующим в шкале абстракции стоит метод
eql?Objecteql?KernelObject====eql?flag1 = (1 == 1.0) # trueflag2 = (1.eql?(1.0)) # falseМетод
eql?eql?hashЛюбой объект реализует еще два метода сравнения. Метод
===caseselector===targetcasecase an_object when String
