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 before 和 after 过滤器会做同样的事情,但这不是 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_draw在您的情况下,您将使用and包装draw

于 2012-10-14T17:22:47.597 回答