我的问题:
为什么callNextMethod()
没有按预期将参数传递给下一个方法?
情况:
假设我有两个分层类foo
和bar
(bar
是 的子类foo
),我有一个foobar
可以为这两个类分派的方法(即,两个类都有方法)。
此外,(子)类的方法在一些计算之后bar
调用方法。foo
callNextMethod()
两种方法都有相同的附加参数(默认),应该传递给 for 的方法foo
,只有它是相关的。
setClass("foo", representation(x = "numeric"))
setClass("bar", contains = "foo")
setGeneric("foobar", function(object, ...) standardGeneric("foobar"))
setMethod("foobar", "foo", function(object, another.argument = FALSE, ...) {
print(paste("in foo-method:", another.argument))
if (another.argument) object@x^3
else object@x^2
})
setMethod("foobar", "bar", function(object, another.argument = FALSE, ...) {
print(paste("in bar-method:", another.argument))
object@x <- sqrt(object@x)
callNextMethod()
})
问题描述:
参数没有按预期传递,但默认值取自方法定义。具体来说,在第一个方法中,参数与调用 ( ) 中指定的一样,但是,它在下一个方法中TRUE
更改为。FALSE
o1 <- new("bar", x = 4)
foobar(o1, another.argument = TRUE)
给
[1] "in bar-method: TRUE"
[1] "in foo-method: FALSE"
[1] 4
我希望another.argument
将 传递给下一个方法,以便它TRUE
也在对该方法的调用中foo
。
据我所知?callNextMethod
,它应该按预期工作(即,命名参数在调用中传递):
对于出现在原始调用中的形式参数,比如 x,在下一个方法调用中存在一个对应的参数,等效于 x = x。实际上,这意味着下一个方法看到相同的实际参数,但参数只计算一次。
我的第二个问题:如何将 another.argument 传递给下一个方法。(我真的很想在这两种方法中保留默认参数)