class_eval和open类

时间:2014-03-10 02:42:06

标签: ruby spree

我正在使用Spree,而Spree有一个名为Order的类,如下所示:

module Spree
  class Order
    # class definition.
  end
end

在我自己的应用中,我一直在自定义Order

Spree::Order.class_eval do
  # customisations
end

我的问题是,我可以简单地执行此操作:

module Spree
  class Order
    # My own customisations.
  end
end

这有什么缺点吗?基本上,我想避免使用class_eval

2 个答案:

答案 0 :(得分:2)

Benjamin,如果现有的课程不存在或没有加载,重新开课不会通知你(但是class_eval会引发错误)。

但是如果你有测试覆盖率,我认为重新上课应该是安全的吗?

答案 1 :(得分:2)

你不能在没有class_eval的情况下改变这个类。 只是尝试覆盖一个方法,所有其他方法都消失了。使用class_eval可以避免它。这就是红宝石的方式。