Lambda
Лямбда(lambda) - это разновидность объекта Proc, почти полностью иддентичная, если не учитывать две ключевые особенности(см ниже)
# Создание
square = lambda { |x| x**2 }
# square = ->(x) { x * 2 }
# Вызов разными способами
puts square.call(5) # => 25
puts square[5] # => 25
puts square.(5) # => 25
# Передача в метод
def execute_lambda(p, val)
p.call(val)
end
puts execute_lambda(square, 10) # => 100
- Строгая проверка аргументов: Если лямбда ожидает 2 аргумент, передача 1 или 3 вызовет ошибку
ArgumentError
square = lambda { |x| x**2 }
puts square.call(5, 444444, 445959)
# => wrong number of arguments (given 3, expected 1) (ArgumentError)- Возврат (return): Вызов
returnвнутри лямбды завершает только саму лямбду, а не метод, в котором она вызвана.
square = lambda do |x|
return x**2
end
def execute_proc(p, val)
p.call(val)
puts "completed"
end
puts execute_proc(square, 10) # => completed