【发布时间】:2020-07-14 21:08:04
【问题描述】:
在 S3 通用函数中,我想在调用 NextMethod() 之前修改函数参数。作为起点,我浏览了 Henrik Bengtsson 的“R 愿望清单”中的 #44。以下 sn-p 取自那里,对应于他关于如何在调用 NextMethod() 之前修改参数的建议。
x <- structure(NA, class = "A")
expected <- list(x = x, a = 3)
foo <- function(x, a) UseMethod("foo")
foo.A <- function(x, a) {
a <- a + 1
NextMethod()
}
foo.default <- function(x, a) {
list(x = x, a = a)
}
identical(foo(x, a = 2), expected)
#> [1] TRUE
identical(foo(x, 2), expected)
#> [1] TRUE
现在让我难过的是以下行为,其中要修改的参数具有默认值。
bar <- function(x, a) UseMethod("bar")
bar.A <- function(x, a = 2) {
a <- a + 1
NextMethod()
}
bar.default <- function(x, a = 2) {
list(x = x, a = a)
}
identical(bar(x, a = 2), expected)
#> [1] TRUE
identical(bar(x, 2), expected)
#> [1] TRUE
identical(bar(x), expected)
#> [1] FALSE
有人可以帮我理解这里发生了什么吗?关于如何使默认参数案例起作用的任何想法(除了显式调用bar.default())?
【问题讨论】:
标签: r oop generics parameter-passing