Rails验证:if => Proc.new或lambda?

时间:2011-06-03 20:07:34

标签: ruby-on-rails lambda

我发现在我看到的所有示例(包括rails文档)中:验证方法的if选项使用Proc.new而不是lambda,例如

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

这有什么理由吗? 据我所知,lambda

  1. 对参数更严格。
  2. 同样,lambda块中的return语句从块返回,而不是从调用函数返回。
  3. 两者似乎都是理想的行为:如果上面提到的选项,我有什么遗漏吗?

1 个答案:

答案 0 :(得分:36)

  

两者似乎都是理想的行为:如果上面提到的选项,我有什么遗漏吗?

我在猜测:

允许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.

这似乎是一件小事,但我想这会增加灵活性。