Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
class << self # Здесь self - это MyClass. include MyMod endendMyClass.meth3# Выводится:# Метод экземпляра модуля meth3# может стать методом класса.Здесь полезен метод
extendclass MyClass extend MyModendМы все время говорим о методах. А как насчет переменных экземпляра? Конечно, модуль может иметь собственные данные экземпляра, но обычно так не делают. Впрочем, если вы решили, что без этого никак не обойтись, ничто вас не остановит.
Можно подмешивать модуль к объекту, а не классу (например, методом
extendВажно понимать еще одну вещь. В вашем классе можно определить методы, которые будут вызываться из примеси. Это удивительно мощный прием, знакомый тем, кто пользовался интерфейсами в Java.
Классический пример, с которым мы уже сталкивались ранее, — подмешивание модуля
Comparable<=><><=Другой пример — подмешивание модуля
Enumerable<=>eachcollectsortminmaxselectМожно также определять и собственные модули, ведущие себя подобным образом. Возможности ограничены только вашим воображением.
11.1.13. Трансформация или преобразование объектов
Иногда объект имеет нужный вид в нужное время, а иногда хочется преобразовать его во что-то другое или сделать вид, что он является чем-то, чем на самом деле не является. Всем известный пример — метод
to_sКаждый объект можно тем или иным способом представить в виде строки. Но не каждый объект может успешно «прикинуться» строкой. Именно в этом и состоит различие между методами
to_sto_strПри использовании метода
puts#{...}stringstringto_sto_sclass Pet def initialize(name) @name = name end # ... def to_s "Pet: #@name" endendДругие методы (например, оператор конкатенации строк
+stringto_sto_strStringExceptionto_strStringRegexpMarshalTypeError: Failed to convert xyz into stringto_strВы можете реализовать метод
to_strclass Numeric def to_str to_s endendlabel = "Число " + 9 # "Число 9"Аналогично обстоит дело и в отношении массивов. Для преобразования объекта в массив служит метод
to_ato_aryа, b, с = xЕсли
xto_aryclass String def to_ary return self.split("") endendstr = "UFO"a, b, с = str # ["U", "F", "O"]Метод
inspectirbpinspectinspect
