Techioz Blog

class_eval とオープンクラス

概要

私は 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 の使用は避けたいと考えています。

解決策

ベンジャミン、既存のクラスが存在しないかロードされていない場合、クラスを再度開いても通知しません (ただし、class_eval はエラーを発生させます)。

でも、テスト範囲があれば、クラスを再開しても安全なはずですよね?

詳細な説明については、https://stackoverflow.com/a/900508/474597 を参照してください。