Открытые классы и исправление обезьянки
Изучите, как Ruby позволяет изменять существующие классы и добавлять новую функциональность
«Открытые классы и исправление обезьянки» — бесплатный урок Ruby Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ruby Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ruby Academy содержит 4 уроков всего.
Изменение классов во время выполнения
Открытые классы и изменение классов на лету
Руби позволяет изменять существующие классы во время выполнения.
Эта возможность, называемая «открытыми классами», позволяет разработчикам динамически расширять или изменять поведение.

Что такое открытые классы?
Что такое открытые классы?
В Руби можно повторно открыть и изменить существующие классы.
Это позволяет добавлять новые методы во встроенные классы или классы, определённые пользователем.
Добавление методов в существующий класс
Добавление методов в существующий класс
Просто повторно определите класс и добавьте новые методы.
class String
def shout
self.upcase + '!!!'
end
end
puts 'hello'.shoutПереопределение методов (изменение классов на лету)
Переопределение методов (изменение классов на лету)
В классах Руби можно переопределять существующие методы.
class String
def reverse
'Reversed method overridden!'
end
end
puts 'hello'.reverseСохранение исходного метода с помощью вызова родительского метода
Сохранение исходного метода с помощью вызова родительского метода
Используйте super, чтобы сохранить поведение исходного метода.
class String
def reverse
super + ' (custom behavior added)'
end
end
puts 'hello'.reverseВарианты использования открытых классов
Варианты использования открытых классов
Открытые классы полезны в различных ситуациях:
- расширение встроенных классов дополнительными методами;
- улучшение сторонних библиотек;
- повышение удобства чтения и сопровождаемости кода.
Риски изменения классов на лету
Риски изменения классов на лету
Изменение классов на лету может быть опасным при неосторожном использовании.
- непредвиденное поведение при изменении базовых классов;
- возможные конфликты со сторонними библиотеками;
- усложнение отладки и сопровождения.
Альтернативы изменению классов на лету
Альтернативы изменению классов на лету
Вместо изменения глобального поведения рассмотрите использование уточнений.
Уточнения позволяют изменять классы в ограниченной области действия.
module StringExtensions
refine String do
def shout
upcase + '!!!'
end
end
end
using StringExtensions
puts 'hello'.shoutПовторение открытых классов
Поздравляем!
Вы научились изменять существующие классы с помощью открытых классов и изменения классов на лету.
Далее вы изучите использование send и eval для динамического вызова методов.

Часто задаваемые вопросы
Урок «Открытые классы и исправление обезьянки» бесплатный?
Да — полный текст урока «Открытые классы и исправление обезьянки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ruby Academy, подпишись на CoddyKit PRO. Курс Ruby Academy содержит 4 уроков всего.
Чему я научусь в уроке «Открытые классы и исправление обезьянки»?
Изучите, как Ruby позволяет изменять существующие классы и добавлять новую функциональность Ты практикуешь Ruby Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ruby Academy?
Предыдущий опыт не требуется. Ruby Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Открытые классы и исправление обезьянки»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ruby Academy?
Да. Каждый урок Ruby Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое метапрограммирование?
- Динамическое определение методов
- Открытые классы и исправление обезьянки
- Использование send и eval