一个(命名的)函数可以反省调用它的名称吗?
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
假设一个函数已绑定到多个名称(每个名称都在不同的绑定环境中)。有没有办法让它找出这些名称中的哪一个(如果有的话)被用来调用它?
一个简单的例子:
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