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
  1. Строгая проверка аргументов: Если лямбда ожидает 2 аргумент, передача 1 или 3 вызовет ошибку ArgumentError
square = lambda { |x| x**2 }

puts square.call(5, 444444, 445959)
# => wrong number of arguments (given 3, expected 1) (ArgumentError)
  1. Возврат (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