如果函数接收任意对象 x
作为参数,测试 x
是否支持某些方法 foo
的最佳方法是什么?
(我认为,作为最后的手段,该函数总是可以尝试使用合适的处理程序在 tryCatch
中评估 foo(x)
,但我发现,至少在某些情况下,即使 x
不支持 foo
,foo(x)
也不会产生错误;相反,它只会返回NULL
。因此,不能依赖捕获异常作为对 x
对 foo
的支持的适当测试。)
我想这个问题的答案将取决于 x
的“对象风格”(S3
、S4
或其他) .请在您的回答中考虑所有这些可能性。
最佳答案
有几种方法可以解决这个问题。
通过以下方式找到可用的方法:
methods(class = class(x))
测试 x
的类是否存在 foo
方法:
"foo" %in% methods(class = class(x))
如果您的方法不是由包导出的(并且只能通过 package:::foo.bar(x)
访问,其中 bar
是 的类x
), 它们不会在上面的示例中显示。
另见 In R, how to find out which method is dispatched for a particular function call?
关于r - 如何测试对象是否具有特定方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41762996/