В чем разница между proc и lambda?
Вопрос помогает выяснить понимание различий между двумя основными типами объектов, представляющих блоки кода.
Короткий ответ
Основные различия между proc и lambda в Ruby:
- lambda строго проверяет количество аргументов, а proc — нет.
- При использовании return в lambda, она возвращается только из самой себя, тогда как proc завершает выполнение всего метода.
Длинный ответ
Хотя proc и lambda создают объекты, представляющие блоки кода, они ведут себя по-разному:
Проверка аргументов:
my_proc = Proc.new { |x| puts x }
my_proc.call # => nil (не вызывает ошибку)
my_lambda = ->(x) { puts x }
my_lambda.call # Ошибка: wrong number of arguments
Поведение return:
def test_proc
my_proc = Proc.new { return "Proc exited method" }
my_proc.call
"Proc didn't exit method"
end
puts test_proc # => Proc exited method
def test_lambda
my_lambda = -> { return "Lambda exited itself" }
puts my_lambda.call
"Lambda didn't exit method"
end
puts test_lambda # => Lambda exited itself \n Lambda didn't exit method
Синтаксис создания:
my_proc = Proc.new { puts "Hello from Proc" }
my_lambda = -> { puts "Hello from Lambda" }
Выбор между proc и lambda зависит от требований к обработке аргументов и необходимости контроля выполнения.