不知道为什么会在这里使用Proc - 不要简单

tim*_*one 4 ruby ruby-on-rails proc

我理解proc的概念,但有时我看到这样的代码(从rails指南中获取验证http://guides.rubyonrails.org/active_record_validations_callbacks.html#using-if-and-unless-with-a-proc):

class Order < ActiveRecord::Base
  before_save :normalize_card_number,
    :if => Proc.new { |order| order.paid_with_card? }
end
Run Code Online (Sandbox Code Playgroud)

看来这可以更简单地写成:

class Order < ActiveRecord::Base
  before_save :normalize_card_number, :if => :paid_with_card? 
end
Run Code Online (Sandbox Code Playgroud)

我在这里没有了解使用Proc的优势?

thx提前

Dan*_*ans 5

在简单的情况下它们是等价的,但是procs允许更多的多功能性,而不需要仅仅为了验证而定义方法.

想象一下:

before_save :nuke, :if => Proc.new { |model| !model.nuked? && model.nukable? && model.region.nukable? }
Run Code Online (Sandbox Code Playgroud)

您始终可以在实例方法中编写该检查并使用符号引用它,但是对于特定逻辑仅在以下情况中的情况:if,将其保留在proc中是有效的.