我試圖創建某種模塊或超類,它包裝子類的每個方法後的一個方法調用。 雖然有一些約束:我不希望在調用initialize()之後運行該方法,也不希望在調用其他幾個方法之後運行該方法。 另一個約束是,如果標誌@check_ec設置爲true,我只希望執行該方法。 我有超過60個方法的類,我硬編碼了遍佈整個地方的同一段代碼。 有沒有一種方法可以使我的類方法自動執行該方法的包裝?Ruby - 在類中的大多數方法後執行相同的代碼
這樣的想法是這樣的:
class Abstract
def initialize(check_ec)
@check_ec = check_ec
end
def after(result) # this is the method that I'd like to be added to most methods
puts "ERROR CODE: #{result[EC]}"
end
def methods(method) # below each method it would execute after
result = method() # execute the given method normally
after(result) if @check_ec and method != :initialize and method != :has_valid_params
end
end
class MyClass < Abstract
def initialize(name, some_stuff, check_error_code)
# do some stuff...
@name = name
super(check_error_code)
end
def my_method_a() # execute after() after this method
return {EC: 0}
end
def my_method_b() # execute after() after this method
return {EC: 7}
end
def has_valid_params() # don't execute after() on this method
return true
end
end
哥倫布的蛋!簡單而美麗。 :) – jaeheung
這太棒了!以優雅的方式解決我的問題! – Unglued