我读过一些帖子,其中 Hadley 开了一个关于自毁函数的笑话。我认为这实现起来会相对简单,但事实证明并非如此。
这是尝试编写一个名为self_deletequine的函数,并尝试在打印其主体后自毁。这个想法是在其中搜索函数的名称.GlobalEnv并将其删除,但这不起作用。我想了解为什么会这样。
self_delete<- function(){
print(body(self_delete))
rm(list=lsf.str(pattern="self_delete"))
}
Run Code Online (Sandbox Code Playgroud)
调用上面的内容会按预期打印以下内容,但不会从 中删除自己.Globalenv,我错过了什么?我确实尝试过rm,ls也没有运气
self_delete()
{
print(body(self_delete))
rm(list = lsf.str(pattern = "self_delete"))
}
Run Code Online (Sandbox Code Playgroud)
您忘记将envir参数设置为rm(),因此它试图self_delete从调用框架中删除,而不是从globalenv().
这有效:
self_delete <- function(){
print(body(self_delete))
rm("self_delete", envir = globalenv())
}
Run Code Online (Sandbox Code Playgroud)