有没有更好的方法来实现以下目标?将方法列为符号似乎有点笨拙......
此代码在 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 应用程序。
ruby 1.9.3
最佳答案
如果您只是想让上面的代码稍微更简洁,您可以尝试以下操作:
def draw_all
(1..4).each do |n|
init_draw
send "draw_method_#{n}"
@draw.draw
end
end
否则,有一个非常好的SO问题right here这真的会对你有帮助。它涉及一些元编程,基本上重新定义方法并用一些附加代码包装它们。在您的情况下,您将使用 init_draw
和 draw
进行包装。
关于ruby - 如何在 Ruby 中使用 before 和 after 包装方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12884360/