Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
action1 end elsif platform == Linux def my_action action2 end else def my_action default_action endendТаким способом мы достигаем желаемого результата, но условие вычисляется только один раз. Когда программа вызовет метод
my_action1.4.2. Отражение
В языках Smalltalk, LISP и Java реализована (с разной степенью полноты) идея рефлексивного программирования — активная среда может опрашивать структуру объектов и расширять либо модифицировать их во время выполнения.
В языке Ruby имеется развитая поддержка отражения, но все же он не заходит так далеко, как Smalltalk, где даже управляющие конструкции являются объектами. В Ruby управляющие конструкции и блоки не представляют собой объекты. (Объект
ProcДля определения того, используется ли идентификатор с данным именем, служит ключевое слово
defined?if defined? some_var puts "some_var = #{some_var}"else puts "Переменная some_var неизвестна."endАналогично метод
respond_to?respond_to?ObjectВ Ruby запрос информации о типе во время выполнения поддерживается очень полно. Тип или класс объекта можно определить, воспользовавшись методом
typeObjectis_a?kind_of?puts "abc".class "" # Печатается Stringputs 345.class # Печатается Fixnumrover = Dog.newprint rover.class # Печатается Dogif rover.is_a? Dog puts "Конечно, является."endif rover.kind_of? Dog puts "Да, все еще собака."endif rover.is_a? Animal puts "Да, он к тому же и животное."endМожно получить полный список всех методов, которые можно вызвать для данного объекта. Для этого предназначен метод
methodsObjectprivate_instance_methodspublic_instance_methodsАналогично можно узнать, какие переменные класса или экземпляра ассоциированы с данным объектом. По самой природе ООП в перечни методов и переменных включаются те, что определены как в классе самого объекта, так и во всех его суперклассах. В классе
ModuleconstantsВ классе
ModuleancestorsMod.ancestorsModВ классе
ObjectsuperclassnilObjectnilМодуль
ObjectSpace_idtorefObjectSpaceeach_objectFixnumNilClassTrueClassFalseClass1.4.3. Отсутствующие методы
При вызове метода (
myobject.mymethod1. Синглетные методы, определенные для объекта
myobject2. Методы, определенные в классе объекта
myobject3. Методы, определенные в предках класса объекта
myobjectЕсли найти метод
mymethodmethod_missing1.4.4 Сборка мусора
Управлять памятью на низком уровне трудно и чревато ошибками, особенно в таком динамичном окружении, какое создает Ruby. Наличие механизма сборки мусора — весомое преимущество. В таких языках, как C++, за выделение и освобождение памяти отвечает программист. В более поздних языках, например Java, память освобождается сборщиком мусора (когда объект покидает область видимости).
