3

私はサービスAPIを持っています。私のクラスにはいくつかのメソッドがあり、Baseこのクラスを継承してそのメソッドを実装する具体的な実装があります。Baseクラスの実装者はほとんどいません。

約 20 個のメソッドがあり、それらすべてのメソッドからの戻り値をトリミングしたいと考えています。しかし、戻り値を 20 個のメソッドのそれぞれにトリムするコードを少し追加するのはためらっています。これを行うためのより良い方法を探していました。

私はここでそれを見つけました:

http://cheind.blogspot.com/2008/12/method-hooks-in-ruby.html

しかし、このアプローチは私のクラスでのみ機能し、Baseクラスを実装するクラスでは機能しませんBase。すべての実装者クラスにどのように適用できますか?

4

2 に答える 2

0

警告: このソリューションは @ju-liu のものほど「クリーン」ではなく、おそらく最も効率的ではありませんが、ワークフローに実装するのは短くて簡単です。また、再定義するメソッドを制限し、より優れたエラー処理を組み込むこともお勧めします。

クラス内で次のBaseことができます。

(Base.instance_methods - Class.instance_methods).each do |method|  
  alias_method "#{method}_backup", method    
  class_eval %Q{    
    def #{method}(*args)
      #{method}_backup(*args).strip rescue #{method}_backup(*args)
    end
  }
end
于 2013-06-24T15:22:17.347 に答える