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