我正在测试通用组函数的方法,并且有一个异常,我不明白为什么。注意下面的代码:
<标题>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.