У Ruby термін метакласи використовується для опису певного рівня об’єктно-орієнтованого програмування, пов’язаного з обробкою класів та об’єктів. Метакласи дозволяють працювати з класами як з об’єктами, що взаємодіють з іншими об’єктами. У Ruby кожен об’єкт має свій власний метаклас, який використовується для зберігання методів, які є унікальними для цього конкретного об’єкта.
Одна з особливостей метакласів у Ruby полягає в тому, що вони є прихованими та автоматично створюються при необхідності. Іншими словами, метаклас виникає автоматично для кожного об’єкта, коли ви визначаєте новий метод для цього об’єкта.
Простий приклад використання метакласів у Ruby:
class Example
def instance_method
puts "This is an instance method"
end
end
obj = Example.new
# Додавання методу тільки для об'єкта obj
def obj.singleton_method
puts "This is a singleton method for obj"
end
obj.singleton_method # Виклик singleton методу
У цьому прикладі метод singleton_method
додається тільки до об’єкта obj, а не до всього класу Example. Цей метод буде зберігатися в метакласі саме для цього конкретного об’єкта.
Метакласи грають важливу роль в реалізації різноманітних магічних методів та аспектів об’єктно-орієнтованого програмування в Ruby.
Метакласи у Ruby є ключовим елементом метапрограмування. Метапрограмування включає в себе можливість програмно маніпулювати програмним кодом, зокрема створювати, змінювати та видаляти класи, методи та інші аспекти програмного коду під час його виконання.