为什么使用Proc.new来调用Rails回调中的方法?

Mus*_*mal 13 ruby ruby-on-rails proc-object

在RoR的所有教程中,我看到编码器选择使用Proc.new的实例,看起来它既不必要又相当缺乏吸引力.

例如,这里是放置在模型中的回调,一个使用Proc.new,另一个可能做同样的事情:

class Order < ActiveRecord::Base  
  before_save :normalize_card_number,  
    :if => Proc.new { |order| order.paid_with_card? }  
end

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

那有什么区别?为什么要使用Proc?他们俩都不叫"paid_with_card"吗?方法?

提前致谢

Jor*_*ens 16

在上面的示例中,使用条件方法的符号可能是最佳选择.

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

string选项使用eval来评估字符串中的Ruby代码.所以个人而言,如果在编写短内联条件时调用方法或者Proc,我更愿意使用符号.

根据RailsGuides文档:

使用Proc对象可以编写内联条件而不是单独的方法.此选项最适合单行.

我认为使用Proc可能会以这种方式更好地说明:

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

这可能会消除对paid_with_card的需求吗?方法.