【发布时间】:2011-10-19 15:30:13
【问题描述】:
所以如果有两种方法:
def foo
method1
method2
end
如何检查所有这些“method1/method2”是否已在方法本身中执行?如何计算该方法被调用的次数。代码也需要在 method1 或 method2 中才能检查。
【问题讨论】:
标签: ruby model-view-controller render rhtml
所以如果有两种方法:
def foo
method1
method2
end
如何检查所有这些“method1/method2”是否已在方法本身中执行?如何计算该方法被调用的次数。代码也需要在 method1 或 method2 中才能检查。
【问题讨论】:
标签: ruby model-view-controller render rhtml
用另一种方式可能很容易,但这种方式看起来干净且模块化。
创建一个名为method_counter 的代理类,它会删除它自己的方法,并定义missing_method、get_method_counts 和一个构造函数。您可以在此处查看如何执行此操作的示例:http://www.binarylogic.com/2009/08/07/how-to-create-a-proxy-class-in-ruby/
现在构造函数接受任何其他对象,并将其存储在内部。 get 方法 counts 方法返回 methodname => count 个对象的哈希值。
每当有人调用不存在的代理对象上的方法时,ruby 就会调用缺少的方法...然后您应该在更新方法后实现它以在包含的对象(在构造函数中传递)上调用相同的方法计算哈希。
这个实现是干净的,因为你没有接触目标对象代码,调用代码只需要更改 1 行(目标对象的构造函数来创建代理)。
【讨论】: