如何在Ruby中包装前后方法?

时间:2012-10-14 16:47:48

标签: ruby metaprogramming ruby-1.9.3

有没有更好的方法来实现以下目标?将方法列为符号似乎有点笨拙......

对于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应用程序。

Ruby 1.9.3

1 个答案:

答案 0 :(得分:2)

如果您只想将代码设置在 little 清洁器上方,可以试试这个:

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

否则,有一个非常好的SO问题right here可以帮助你。它涉及一个小元编程,基本上重新定义方法并用一些额外的代码包装它们。在您的情况下,您可以使用init_drawdraw进行换行。