假设我有一个类Caller
,它在ruby中调用另一个类的方法(即Abc
):
class Caller
def run
abc = Abc.new
abc.method1
abc.method2
end
end
class Abc
def method1
puts 'Method1 etc'
end
def method2
puts 'Method2 etc'
end
end
caller = Caller.new
caller.run
每次调用类Abc
中的方法时,我都需要使用显示Calling
方法类名称和方法名称的前缀来修饰调用
例如。在上面的例子中,我需要以下输出:
Caller.run - Method1 etc
Caller.run - Method2 etc
在ruby中执行此操作的最佳方法是什么?
答案 0 :(得分:4)
您可以创建不会定义任何特定方法的装饰器,但会实现method_missing
挂钩,并以您需要的任何代码包装每个调用:
class Caller
def initialize(object)
@object = object
end
def method_missing(meth, *args, &block)
puts 'wrapper'
@object.public_send(meth, *args, &block)
end
end
class YourClass
def method1
puts "method 1"
end
end
c = Caller.new(YourClass.new)
c.method1
这样你的装饰师就不引人注目了。此外,您可以控制包装的方法调用(例如,通过在method_missing
中定义白名单或黑名单)。这是在分离良好的代码块中定义方面行为的非常明确的方法。