2

我读了一些帖子,其中哈德利开了一个关于自毁功能的笑话。我认为这实现起来相对简单,但事实证明并非如此。

这是一个尝试编写一个名为self_deletequine 的函数,并在打印其主体后尝试自毁。这个想法是在其中搜索函数的名称.GlobalEnv并将其删除,但这不起作用。我想了解为什么会这样。

self_delete<- function(){
   print(body(self_delete))
   rm(list=lsf.str(pattern="self_delete"))
 }

调用上述内容会按预期打印以下内容,但不会从中删除自身.Globalenv,我错过了什么?我确实尝试过rmls也没有运气

 self_delete()
{
    print(body(self_delete))
    rm(list = lsf.str(pattern = "self_delete"))
}
4

1 回答 1

5

您忘记将envir参数设置为rm(),因此它试图self_delete从调用框架中删除,而不是从globalenv().

这有效:

self_delete <- function(){
  print(body(self_delete))
  rm("self_delete", envir = globalenv())
}
于 2020-05-14T14:24:25.827 回答