所以如果有两种方法:
def foo
method1
method2
end
如何检查所有这些“method1/method2”是否已在方法本身中执行?如何计算该方法被调用的次数。代码还需要在方法 1 或方法 2 中进行检查。
所以如果有两种方法:
def foo
method1
method2
end
如何检查所有这些“method1/method2”是否已在方法本身中执行?如何计算该方法被调用的次数。代码还需要在方法 1 或方法 2 中进行检查。
用另一种方式可能很容易,但这种方式看起来干净且模块化。
创建一个名为 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 行(目标对象的构造函数来创建代理)。