自毁函数

Function that self destructs

我读了一些 post,其中 Hadley 开了一个关于自毁函数的玩笑。我认为这实现起来相对简单,但事实并非如此。

这里尝试编写一个名为 self_delete 的函数,它是一个 quine 并在打印其主体后尝试自毁。想法是在 .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"))
}

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

这个有效:

self_delete <- function(){
  print(body(self_delete))
  rm("self_delete", envir = globalenv())
}