В Ruby замикання або closures є концепцією, яка дозволяє функції зберігати доступ до змінних з оточення, в якому вони були визначені, навіть після того, як вони вийшли з цього оточення. Замикання є способом зберігання стану та контексту виклику функції.
Основна ідея замикань в Ruby полягає в тому, що ви можете визначити функцію всередині іншої функції, і внутрішня функція може мати доступ до змінних, що визначені в зовнішній функції.
def outer_function(x)
# Внутрішня функція, яка є замиканням
inner_function = proc do |y|
puts x + y
end
# Повертаємо замикання з outer_function
return inner_function
end
# Створюємо замикання, передаючи йому значення x
closure = outer_function(10)
# Викликаємо замикання з новим значенням y
closure.call(5) # Результат буде 15
У цьому прикладі inner_function
- це замикання, яке має доступ до параметра x
, визначеного в outer_function
. Коли ми викликаємо outer_function(10)
, ми отримуємо замикання, яке може використовувати значення x
після того, як outer_function
вже вийшла з виклику.
Замикання в Ruby часто використовуються для створення анонімних функцій або для передачі функцій як аргументів до інших функцій.