【问题标题】:Can a (named) function introspect the name it was invoked with?(命名的)函数可以内省调用它的名称吗?
【发布时间】:2017-05-17 13:21:40
【问题描述】:

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

一个简单的例子:

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 中的内省;我并不是要解决任何具体问题。)

【问题讨论】:

  • 添加一些示例代码来设置您描述的环境将使人们更容易理解您想要什么,并提供解决方案。

标签: r introspection


【解决方案1】:

试试sys.call:

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

注意:

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

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

【讨论】:

    猜你喜欢
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多