如何测试对象是否具有特定方法?

kjo*_*kjo 3 oop r

如果函数接收任意对象x作为参数,测试是否x支持某种方法的最佳方法是什么foo

(我认为,作为最后的手段,该函数总是可以尝试在具有合适处理程序的foo(x)a 内进行评估tryCatch,但我发现,至少在某些情况下,即使不支持foo(x)也不会产生错误;相反,它只会return 。因此,不能依赖捕获异常作为对 的支持的合适测试。)xfooNULLxfoo

我想这个问题的答案将取决于 的x“对象风味”(S3S4或其他)。请在您的回答中考虑所有此类可能性。

set*_*ler 5

有几种方法可以解决这个问题。

通过以下方式查找可用方法:

methods(class = class(x))
Run Code Online (Sandbox Code Playgroud)

测试foo的类是否存在方法x

"foo" %in% methods(class = class(x))
Run Code Online (Sandbox Code Playgroud)

如果您的方法不是由包导出的(并且只能通过package:::foo.bar(x)wherebar的类访问x),则它们不会在上面的示例中显示。


另请参见在 R 中,如何找出为特定函数调用调度哪个方法?