Метапрограммирование
Метапрограммирование
Метапрограммирование - это область программирования, в которой результатом написания кода является не потребительская программа, а изменение языка или и вовсе, создание нового. Звучит тяжело, но попробуем разобраться.
Как мв рассматривали ранее, в Ruby абсолютно все является объектами и классами. например наш кастомный класс Person
невидимо для нас является наследником Object
, при этом класс Person
является объектом класса Class
. Именно с последней особенностью тестно связаны наши методы класса, которые мы обявляет через self
.
Для начала давайте разберем такое понятие как singleton
методы.
Предположим у нас есть класс Person
А теперь посмотрим как мы можем добавить новый метод для объекта не изменяя сам класс
Так вот, когда вы объявляете метод класса с помощью self
в начале, то вы по сути создаете singletone метод для объекта класса Class
, ведь наш класс Person
вляется его объектом.
Само по себе ключевое слово self
обозначает указание на собственный объект, только в зависимости от области нахождения этого слова, может меняться сам оюъект на который он указывает, т.е. в нашем случае это либо указание на собственный объект класса Person
, либо указание на объект класса Class
.
Аналогичную запись можно сделать с помощью наследования
Кроме того, мы может добавлять на лету методы для нашего класса
Помимо прочего, мы также можем расширять методы класса с помощью специального метода instance_eval
А также может добавлять методы для каждого объекта нашего лкасса с помощью метода class_eval
В Ruby существует оргомное количество библиотек, которые расширяют те или иные классы. Фреймворк Rails по большей части строится вокруг этой концепции, с чем вы убедитесь позже.
Задание reverse_words
Напишите метод reverse_words
, который можно будет вызвать у любой строки и который будет менять последовательность слов в обратном порядке
Пример:
Дополнительный материал:
Last updated