最近一位同事正在研究呼叫图,并希望看到什么叫做什么.我们用mvbutils的foodweb对它进行了排序,但我想知道如何最好地在R中创建一个装饰器(用python说话).所以我这样做了:
instrument=function(z){
force(z)
n=deparse(substitute(z)) # get the name
f=function(...){
cat("calling ", n,"\n")
x=z(...)
cat("done\n")
return(x)
}
return(f)
}
Run Code Online (Sandbox Code Playgroud)
这让我做:
> foo=function(x,y){x+y}
> foo(1,2)
[1] 3
Run Code Online (Sandbox Code Playgroud)
现在我可以通过包装它来使函数自己记录:
> foo=instrument(foo)
> foo(1,2)
calling foo
done
[1] 3
Run Code Online (Sandbox Code Playgroud)
以前做过这件事,在一个包裹中说,并且我错过了任何会破坏我这样做的陷阱吗?