Динамическое создание методов в Ruby с помощью define_method

В языке программирования Ruby метапрограммирование - это мощный инструмент, который позволяет программистам изменять и расширять поведение своих классов и объектов на лету. Одним из наиболее полезных методов метапрограммирования в Ruby является define_method. Давайте рассмотрим, как этот метод позволяет создавать методы динамически во время выполнения программы.

class MyClass define_method :my_method do puts "This is my method!" end end obj = MyClass.new obj.my_method # Выводит "This is my method!"
def self.my_attr_accessor *attributes attributes.each do |attribute| # Getter define_method attribute do self.instance_variable_get "@#{attribute}" end # Setter define_method "#{attribute}=" do |value| self.instance_variable_set "@#{attribute}", value end end end my_attr_accessor :name, :country, :city def initialize name, country, city @name, @country, @city = name, country, city end

Одним из основных преимуществ define_method является его способность создавать методы динамически на основе условий или логики программы. Это может быть полезно, например, при создании динамических делегатов или при определении методов на основе внешних данных.