如果在块中调用某个方法,我该如何获取它的名字?例如,我有这个简单的记录器(改编自Ross Olsen的书 Eloquent Ruby ):
def self.with_logging(text, &block)
begin
puts ">> START: #{text}"
yield if block_given?
puts "<< END: #{text}"
rescue
puts "-- FAILED: #{text}"
raise
end
end
我使用它来记录对方法foo
的调用,如下所示:
with_logging('foo') { foo }
方法名称foo
在text参数和with_logging
的块中重复。我想删除这个重复,使text
参数默认为块中使用的方法的名称,但我如何找到方法的名称?
答案 0 :(得分:2)
除非使用调查代码解析结果的元编程,否则不可能这样做。
但你可以做相反的事情。给定方法的名称和块的缺失,您可以默认在块中调用该方法。
def self.with_logging(text)
begin
puts ">> START: #{text}"
block_given? yield : send(text)
puts "<< END: #{text}"
rescue
puts "-- FAILED: #{text}"
raise
end
end