В чем разница между 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 зависит от требований к обработке аргументов и необходимости контроля выполнения.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Ruby

Ключевые слова

Подпишись на Ruby Developer в телеграм