我有一个包含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
Run Code Online (Sandbox Code Playgroud)
有一个错误,因为当我们打印它的值时x,它似乎show在幕后调用,但它正在使用shinyjs::show而不是methods::show.通过methods::show(x)明确打印,问题就消失了.但我有点困惑的是,为什么默认情况下S4打印系统在show没有命名空间的情况下调用它 - 这不是危险的,而且这个错误发生的并不是我的软件包的错!
拥有与函数同名的函数被认为是一个非常糟糕的主意methods?我的想法是S4系统应该知道调用自己的show函数或继承的S4 show函数.
编辑:我问哈德利他的想法,他似乎也认为这可能是R中的一个错误,我通过电子邮件发送r-devel来获得他们的意见
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |