Очередная дискуссия про лямбда и про - PullRequest
0 голосов
/ 04 декабря 2011

Я думал, что когда вы вызываете proc в методе, возвращаемое значение proc вызывает возврат из контекста блока out, который вызвал proc.Когда я звоню test(a_block), я чувствую, что puts "after the block" не должен выполняться, поскольку было возвращаемое значение из proc.Далее ... test(a_block) и test(b_block) ведут себя точно так же.Я думал, что здесь должна быть разница?

a_block = Proc.new do
  puts "in the Proc"
  55
end

b_block = lambda do 
  puts "in the lambda"
  66
end

def test(block)

  puts "in test"
  puts block.call
  puts "after the block"
  99 
end

puts test(a_block)
puts test(b_block)

Ответы [ 2 ]

1 голос
/ 04 декабря 2011

возвращаемое значение

в вашем первом предложении должно читаться как

заявление о возврате

Используйте return 66 и return 55, и вы увидите свет!

Большое исследование по закрытию Ruby можно найти здесь: http://innig.net/software/ruby/closures-in-ruby.rb

0 голосов
/ 04 декабря 2011

Согласно этому вопросу , они должны вести себя совершенно так же, как в вашем примере.Единственное заметное отличие состоит в том, что lambda проверяет количество аргументов при вызове, тогда как Proc.new выдает неопределенную ошибку метода.

Обратите внимание, что я не эксперт Ruby-ist.Я прочитал ваш вопрос, а затем нажал на первую «связанную» ссылку на боковой панели, которая выглядела полезной.Пожалуйста, ищите более внимательно в будущем.

...