ジェネリック関数呼び出しの引数のオブジェクト名を取得するにはどうすればよいですか?
おもちゃの例は質問を明確にし、私が理解しているように、コアの問題です。いくつかの 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()
コール スタックの他の場所に特定の環境を提供する必要があるのではないかと思います。しかし、その場合、どちらが食い違いを埋めるのかわかりません。