如何将参数的对象名称捕获到通用函数调用?
一个玩具示例将阐明问题,并且据我所知,核心问题。考虑某个 S3 类的对象:
X <- structure("blah", class = "SomeClass")
对于SomeClass
对象,我想创建一个简单地打印对象名称print
的(愚蠢的)方法。特别是,当我在控制台输入时,我想看到名称:X
X
> X
X
我尝试使用以下方法来实现这一点:
print.SomeClass <- function(y) cat(deparse(substitute(y)))
正如预期的那样,调用print(X)
给出了。X
但是只要X
在控制台输入(大写)就会给出x
(小写):
> print(X)
X
> X
x
是什么赋予了?我猜这x
是从泛型函数的参数名称派生的print
。我必须如何修改print.SomeClass
才能直接调用X
给X
?
问题似乎是在控制台上通过裸调用显示对象和通过显示对象之间存在差异print
——它们并不完全等效。我怀疑,我可能需要substitute()
在调用堆栈的其他地方提供特定环境。但在那种情况下,我不知道哪一个会弥合差异。