Публікуємо різні приклади коду з define_method в Ruby для вивчення та розуміння як це працює.
Динамічна генерація ацессорів для змінних класу
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")