2012-10-14 50 views
2

有沒有更好的方法來實現以下目標?將這些方法列爲符號似乎有點笨拙......如何用Ruby之前和之後包裝方法?

此代碼在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

+0

你可以看看Rails的前/後代碼。 – Reactormonk

回答

2

如果你只想做一個小上面的代碼更乾淨,你可以試試這個:

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

否則,有一個相當不錯的SO質疑right here那會真的幫助你。它涉及一些基本的重新定義方法的元編程,並用一些額外的代碼對它們進行包裝。在你的情況下,你會包裝init_drawdraw

+0

是的,這個問題非常相關。 –

相關問題