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

时间:2017-05-17 13:21:40

标签: r introspection

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

一个简单的例子:

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中的内省;我并没有试图解决任何具体问题。)

1 个答案:

答案 0 :(得分:6)

尝试sys.call

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

请注意:

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

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