是否可以获取当前范围中调用的方法列表,例如在另一个方法中?
我知道我可以获得有关当前正在执行的方法的信息,但是可以为执行刚刚结束的方法执行此操作吗?
def my_method
[1, 3, 2].sort
# is there a magic method that does this?
last_method_called = magic_method
# last_method_called is now :sort
end
我的目的是为我的模型和控制器添加一种记录器,并尽可能地释放方法代码。在我调用某个方法之后,例如数组上的这个sort
,就在它之后我想访问:
这些我将传递给我的日志记录方法,该方法将使用该信息生成一些日志消息。例如,我可以将消息文本保存在本地化的yaml文件中,其中键对应于类,方法和最后的方法。
我需要这种日志记录用于rake任务,数据迁移等,我想避免这种情况:
output = "Seeding pages:\n"
pages.each |page|
output << " * #{page.label}\n"
status = page.do_something
output << " did something to the page: #{status}"
end
(请注意,以上只是即兴发挥作用)
而不是那样,如果我能有这样的东西会很好:
# ...
status = page.do_something
log status
其中log是一个通过关注添加到类中的方法,并且会执行以下操作:
def log(message)
# current_method - a helper that I would add, returns Symbol
# current_class - a helper that I would add, returns Symbol
# last_method - a helper that I would add, returns Symbol
@log << I18n.t last_method, scope: [current_class, current_method], message: message
end