我有一个包shinyjs
,其中包含一个名为show
的函数。今天用户向我报告说这在使用S4对象时引入了问题因为"打印" -S4对象使用show
方法,当我的包被附加时它被屏蔽
示例:
library(shinyjs)
setClass("testS4Object",
representation(
ID = "numeric",
Name = "character"
),
prototype(
ID = NA_real_,
Name = NA_character_
)
)
x = new("testS4Object")
x
出现错误,因为当我们打印x
的值时,它似乎在幕后调用show
,但它使用shinyjs::show
代替methods::show
。通过明确打印methods::show(x)
,问题就消失了。但是我有点困惑的是,为什么默认情况下S4打印系统调用show
而没有命名空间 - 这不是危险而不是我的软件包的错误,这个错误正在发生?
在methods
中使用与函数同名的函数被认为是一个非常糟糕的主意吗?我的想法是S4系统应该知道调用自己的show
函数或继承的S4 show
函数。
编辑:我问哈德利他的想法,他似乎也认为这可能是R中的一个错误,我通过电子邮件向r-devel发送了他们的意见