R S3系统-通用组

  • 本文关键字:-通 系统 S3 r
  • 更新时间 :
  • 英文 :


我正在测试通用组函数的方法,并且有一个异常,我不明白为什么。注意下面的代码:

<标题>R代码:
min.ben <- function(..., na.rm = FALSE) print("Test")
x <- structure(2:5, class = "ben")
min(x)
<标题>输出:
[1] "Test"
[1] "Test"

疑问与疑问

为什么会出现这种双出口?我怀疑因为print函数也是通用的,所以可能会发生一些异常。这个想法不是用非泛型函数或任何其他替代方法替换打印函数,但是您知道为什么会这样!

print()函数返回它的参数,但通常是不可见的。所以你的min(x)的结果将是"Test",但不知何故,隐形标记丢失了。我看那像个bug。

您可以通过使用withVisible():

看到这一点
> withVisible(min(x))
[1] "Test"
$value
[1] "Test"
$visible
[1] TRUE

@user2554330,我更愿意显示问题可能是print.default()中的调度。请参阅下面的代码,我将创建一个print.ben()方法,并且错误不会像初始问题中通知的那样发生。为了更清楚,我刚刚为min.ben()方法创建了一个x参数。看到:

min.ben <- function(x, ..., na.rm = FALSE) {
print(x) 
}
print.ben <- function(x) {
"Dispatched in print.ben"
}
x <- structure(2:5, class = "ben")
min(x)
## [1] "Dispatched in print.ben"

如果你删除print.ben(),同样的错误发生,即双结果。我看到的唯一解释是print.default.

的输出。

最新更新