2

以下を達成するためのより良い方法はありますか?メソッドをシンボルとしてリストするのは少し不格好に思えます...

このコードは、4 つのメソッドのそれぞれに対してinit前後に実行されます。draw次のコードは機能しますが、もっと読みやすく慣用的な方法はありますか?

Class DrawMap
  def draw_method_1
    ...
  end

  def draw_method_2
    ...
  end

  def draw_all
    [:draw_method_1, :draw_method_2, :draw_method_3, :draw_method_4].each do |method|
      init_draw
      send method
      @draw.draw
    end
  end

...

フィルターの前と後の Rails は同じことを行いますが、これは Rails アプリではありません。

ルビー1.9.3

4

1 に答える 1

2

上記のコードをもう少しきれいにしたいだけなら、これを試すことができます:

def draw_all
  (1..4).each do |n|
    init_draw
    send "draw_method_#{n}"
    @draw.draw 
  end
end

それ以外の場合は、ここにかなり役立つSO の質問があります。これには、基本的にメソッドを再定義し、いくつかの追加コードでラップする小さなメタプログラミングが含まれます。あなたの場合、init_drawand でラップしdrawます。

于 2012-10-14T17:22:47.597 に答える