自毁函数

Nel*_*Gon 2 r function quine

我读过一些帖子,其中 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,我错过了什么?我确实尝试过rmls也没有运气

 self_delete()
{
    print(body(self_delete))
    rm(list = lsf.str(pattern = "self_delete"))
}
Run Code Online (Sandbox Code Playgroud)

use*_*330 5

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

这有效:

self_delete <- function(){
  print(body(self_delete))
  rm("self_delete", envir = globalenv())
}
Run Code Online (Sandbox Code Playgroud)