2

ジェネリック関数呼び出しの引数のオブジェクト名を取得するにはどうすればよいですか?

おもちゃの例は質問を明確にし、私が理解しているように、コアの問題です。いくつかの S3 クラスのオブジェクトを考えてみましょう:

X <- structure("blah", class = "SomeClass")

オブジェクトについては、単にオブジェクトの名前SomeClassを出力する (ばかげた) メソッドを作成したいと考えています。特に、コンソールで入力すると、名前が表示されます。printXX

> X
X

私は次の方法でこれを実装しようとしました:

print.SomeClass <- function(y) cat(deparse(substitute(y)))

期待どおり、呼び出すとprint(X)が得られXます。しかしX、コンソールで(大文字)を入力するだけでx(小文字):

> print(X)
X
> X
x

何を与える?これxは、ジェネリック関数の引数の名前に由来していると思いますprintprint.SomeClass直接呼び出すと、どのように変更する必要がありXますXか?

この問題は、コンソールでの裸の呼び出しによるオブジェクトの表示と、コンソールによるオブジェクトの表示との間の不一致のようprintです。これらは完全に同等ではありません。substitute()コール スタックの他の場所に特定の環境を提供する必要があるのではないかと思います。しかし、その場合、どちらが食い違いを埋めるのかわかりません。

4

0 に答える 0