我正在使用一些元编程(使用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
我以前误解了这个问题,下面是一个更接近你想要做的更新版本。 –