我正在使用一些元編程(使用ruby 2.3.1),以便在調用實際方法之前調用我想調用的方法 - 就像before_filter/before_action。NoMethodError:undefined method`alias_method'
下面的僞代碼解釋什麼,我試圖實現
module Api
def call_this_method_everytime
if A
go ahead and call the actual method being called
else
stop here do not call he method it was supposed to call
end
end
def when_i_call_this_method
end
def or_this_method
end
end
有所謂成員,我能夠從理論上理解我想用元編程做的幫助 - 這是我得出了下面的代碼。
module Api
def heartbeat
...
end
def interceptor(name)
original_method = "original #{name}"
alias_method original_method, name
define_method(name) do |*args|
heartbeat
result = send original_method, *args
puts "The method #{name} called!"
result
end
end
end
與其說我想要的方式 - 我稱之爲具有實際功能,我想作爲參數調用的名稱攔截方法。然後,我會先打電話heartbeat
功能,如果檢查是好的,然後我繼續實際調用實際功能。
但是有元編程的知識有限,我得到這個錯誤
NoMethodError: undefined method 'alias_method'
搜索周圍沒有幫助。任何幫助讚賞。
alias_method是有效的支持方法,這就是爲什麼你要在這裏可能是不確定的。 –
讓我看看我是否正確理解 - 當調用'interceptor(my_method)'時,您想修改my_method以在繼續使用其原始功能之前首先調用heartbeat?在你的代碼中,你使用alias_method來創建原始方法的一種「拷貝」,然後你可以調用修改後的方法,一旦你調用了心跳? – eiko
我以前誤解了這個問題,下面是一個更接近你想要做的更新版本。 –