自毁函数
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
中删除自己,我错过了什么?我确实尝试过 rm
和 ls
也没有运气
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())
}
我读了一些 post,其中 Hadley 开了一个关于自毁函数的玩笑。我认为这实现起来相对简单,但事实并非如此。
这里尝试编写一个名为 self_delete
的函数,它是一个 quine 并在打印其主体后尝试自毁。想法是在 .GlobalEnv
中搜索函数的名称并将其删除,但这不起作用。我想明白为什么会这样。
self_delete<- function(){
print(body(self_delete))
rm(list=lsf.str(pattern="self_delete"))
}
调用上面的命令会按预期打印以下内容,但不会从 .Globalenv
中删除自己,我错过了什么?我确实尝试过 rm
和 ls
也没有运气
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())
}