一个(命名的)函数可以反省调用它的名称吗?

Can a (named) function introspect the name it was invoked with?

假设一个函数已绑定到多个名称(每个名称都在不同的绑定环境中)。有没有办法让它找出这些名称中的哪一个(如果有的话)被用来调用它?

一个简单的例子:

original.name <- function () cat("don't know my name (yet)...\n")
call.thunk <- function (thunk) thunk()
foo <- original.name

foo()
## don't know my name (yet)...
call.thunk(original.name)
## don't know my name (yet)...

在上面的第一次调用中,函数的名称是 foo;在第二个中,它被称为 thunk。是否可以修改函数的主体以便确定此信息?


(提出这个问题的动机是想更多地了解 R 中的自省;我并不是要解决任何具体问题。)

尝试 sys.call:

g <- f <- function() sys.call()[[1]]
f()
## f

注意:

  • 此 returns class "name" 的对象。要将名称作为字符串使用 as.character(sys.call()[[1]]) .

  • match.call()[[1]] 也可以作为 body