【问题标题】:How to wrap methods with before and after in Ruby?如何在 Ruby 中使用 before 和 after 包装方法?
【发布时间】:2012-10-14 16:47:48
【问题描述】:

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

此代码对 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

【问题讨论】:

  • 你可以看看 Rails 的前后代码。

标签: ruby metaprogramming ruby-1.9.3


【解决方案1】:

如果你只是想让上面的代码一点更干净,你可以试试这个:

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

否则,有一个很好的 SO 问题 right here 会真正帮助您。它涉及一点元编程,基本上重新定义方法并用一些额外的代码包装它们。在您的情况下,您将使用 init_drawdraw 进行包装。

【讨论】:

  • 是的,这个问题非常相关。
猜你喜欢
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
  • 2021-09-12
相关资源
最近更新 更多