Проверка Rails: if => Proc.new или lambda? - PullRequest
32 голосов
/ 04 июня 2011

Я обнаружил, что во всех примерах (включая документацию по rails), которые я видел для: если опция методов проверки использует Proc.new вместо lambda, например

class Foo < ActiveRecord::Base
  validates_presence_of :name, :if => Proc.new{|f| .... } # why not lambda here?
end

есть ли причина для этого? Насколько я знаю, лямбда

  1. Строгее с аргументами.
  2. Также оператор return в лямбда-блоке возвращается из блока, а не из вызывающей функции.

И то, и другое кажется желательным для: если упомянутый выше вариант, я что-то упускаю?

1 Ответ

36 голосов
/ 04 июня 2011

И то, и другое кажется желательным поведением: если упомянутый выше вариант, я что-то упускаю?разрешить Procs, поскольку они не заботятся о количестве аргументов.Таким образом, я мог бы легко написать любое из следующего:

validates_presence_of :name, :if => Proc.new{|f| f.display_name.blank? }    # I care about 'f' here as I need it to check something.

... и:

validates_presence_of :secret_sauce, :if => Proc.new{ MyApp::REQUIRE_SECRET_SAUCE }    # I don't care about any arguments being passed in.

Это может показаться незначительным, но я предполагаю, что это добавляет гибкости

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...