【发布时间】:2019-05-18 18:33:35
【问题描述】:
假设我们有以下 S3 泛型,我们想要使用第一个参数的类进行调度:
genfun <- function(x, ...) UseMethod("genfun", x)
现在让我们考虑这个泛型的numeric 方法:
genfun.numeric <- function(x, y) {
x[y]
}
以下调用运行良好:
genfun(1:5, 3)
值得注意的是,方法的参数名称似乎不需要与泛型的名称匹配。事实上,如果我们这样定义numeric 方法:
genfun.numeric <- function(a, b) {
a[b]
}
它也有效:
genfun(1:5, 3)
但是,以下调用失败:
genfun(a = 1:5, b = 3)
然而,如果我们返回与泛型参数名称匹配的方法的第一个定义:
genfun.numeric <- function(x, y) {
x[y]
}
带有命名参数的调用可以正常工作:
genfun(x = 1:5, y = 3)
或:
genfun(y = 3, x = 1:5)
有没有办法使基于参数a 和b 的方法定义在使用命名参数调用时也有效?
【问题讨论】:
-
为什么要标记
amazon-s3? -
为什么需要这个?最好使用与泛型中相同的参数名称。
-
我没有使用标签
amazon-s3,而只使用了标签s3。 -
@Roland:我想这样做的原因是因为我最终想对第二个参数进行调度,这可能碰巧在不同的方法中有不同的名称。但我同意这可能不是一个好主意。只是在我进行更改之前进行检查。
-
“我最终希望对第二个参数进行调度”,这在 S3 中是不可能的。