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

Xia*_*Guo 32 lambda ruby-on-rails

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

class Foo < ActiveRecord::Base
  validates_presence_of :name, :if => Proc.new{|f| .... } # why not lambda here?
end
Run Code Online (Sandbox Code Playgroud)

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

  1. 参数更严格.
  2. lambda块中的return语句也从块返回,而不是从调用函数返回.

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

Jit*_*its 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.
Run Code Online (Sandbox Code Playgroud)

......和:

validates_presence_of :secret_sauce, :if => Proc.new{ MyApp::REQUIRE_SECRET_SAUCE }    # I don't care about any arguments being passed in.
Run Code Online (Sandbox Code Playgroud)

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