Подтвердить что ты не робот

Проверка правильности: if => Proc.new или lambda?

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

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

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

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

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

4b9b3361

Ответ 1

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

Я предполагаю, что:

Более желательно разрешить 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.

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