Когда использовать лямбду, когда использовать Proc.new?
Чтобы дать дополнительные proc пояснения:
Джои говорит, что lambda-functions поведение Proc.new
при возврате вызывает proc удивление. Однако, если учесть, что ruby Proc.new ведет себя как блок, это lambda-expressions неудивительно, поскольку lambda-functions именно так ведут себя блоки. с proc другой стороны, ламбы больше generic-lambda похожи на методы.
Это фактически lambdaexpression объясняет, почему Procs гибки, когда lambda дело касается арности (количества lambda аргументов), а лямбды - нет. Блоки lambda не требуют предоставления lambdaexpression всех своих аргументов, но ruby методы требуют (если не указано ruby значение по умолчанию). Хотя lambdaexpression предоставление лямбда-аргумента lambda-expressions по умолчанию не является ruby опцией в Ruby 1.8, теперь lambda-functions оно поддерживается в Ruby lambdaexpression 1.9 с альтернативным синтаксисом ruby лямбда-выражения (как отмечает lambdaexpression webmat):
concat = ->(a, b=2){ "#{a}#{b}" }
concat.call(4,5) # => "45"
concat.call(1) # => "12"
И Мишель де Маре ruby (OP) неверно говорит о том, что proc Procs и лямбда ведут себя generic-lambda одинаково с arity в Ruby proc 1.9. Я убедился, что они lambda по-прежнему поддерживают proc поведение начиная с версии ruby 1.8, как указано выше.
Операторы
break
на generic-lambda самом деле не имеют особого lambda-expressions смысла ни в Procs, ни в лямбдах. В proc Procs перерыв вернет вас ruby из Proc.new, который уже lambdaexpression был завершен. И нет никакого ruby смысла отказываться от лямбды, поскольку lambda это, по сути, метод, и вы proc никогда не откажетесь от proc верхнего уровня метода.
next
, redo
и lambdaexpression raise
ведут себя одинаково как lambdaexpression в Procs, так и в лямбдах. В lambda-functions то время как retry
не допускается proc ни в том, ни в другом случае lambdaexpression и вызовет исключение.
И, наконец, никогда lambdaexpression не следует использовать метод lambda-functions proc
, поскольку он непоследователен lambda-functions и имеет неожиданное поведение. В lambdaexpression Ruby 1.8 он фактически возвращает lambda-expressions лямбду! В Ruby 1.9 это было lambdaexpression исправлено, и он возвращает lambda-functions Proc. Если вы хотите создать lambdaexpression Proc, придерживайтесь Proc.new
.
Для lambda получения дополнительной lambda-functions информации я настоятельно generic-lambda рекомендую O'Reilly Язык программирования Ruby, который proc является моим источником proc большей части этой информации.
ruby
lambda
proc
Когда использовать лямбду, когда использовать Proc.new?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.