Приклади коду з define_method в Ruby

Публікуємо різні приклади коду з define_method в Ruby для вивчення та розуміння як це працює.

Динамічна генерація ацессорів для змінних класу :slight_smile:

class MyClass
  ATTRIBUTES = [:name, :age, :gender]

  ATTRIBUTES.each do |attribute|
    define_method(attribute) do
      instance_variable_get("@#{attribute}")
    end

    define_method("#{attribute}=") do |value|
      instance_variable_set("@#{attribute}", value)
    end
  end
end

obj = MyClass.new
obj.name = "John"
obj.age = 30
obj.gender = "male"

puts obj.name
puts obj.age
puts obj.gender

Створення замикань на основі параметрів :

class MathOperations
  OPERATORS = {
    add: '+',
    subtract: '-',
    multiply: '*',
    divide: '/'
  }

  OPERATORS.each do |operation, operator|
    define_method(operation) do |num1, num2|
      eval("#{num1} #{operator} #{num2}")
    end
  end
end

math = MathOperations.new
puts math.add(5, 3)
puts math.multiply(4, 6)

Динамічна генерація методів для виконання дій над об’єктами

class Processor
  ACTIONS = [:process_a, :process_b, :process_c]

  ACTIONS.each do |action|
    define_method(action) do |data|
      puts "Performing action #{action} on #{data}"
    end
  end
end

processor = Processor.new
processor.process_a("data A")
processor.process_b("data B")
processor.process_c("data C")