有没有办法定义方法的参数缺失或NULL时会发生什么?
在下面的例子中,无论是键入foo()还是键入,我都想调用相同的函数foo(NULL).当然我知道我可以有一个方法,setMethod("foo","NULL",function(x) foo()) 但那是代码复制和可能的错误来源.
谢谢!
setGeneric("foo",function(x) standardGeneric("foo"))
setMethod("foo","numeric",function(x) "numeric")
setMethod("foo","NULL",function(x) "NULL")
setMethod("foo","missing",function(x) "missing")
R> foo(1)
[1] "numeric"
R> foo()
[1] "missing"
R> foo(NULL)
[1] "NULL"
Run Code Online (Sandbox Code Playgroud)
Bro*_*ieG 12
派对迟了差不多三年,但你真的想要setClassUnion:
> setClassUnion("missingOrNULL", c("missing", "NULL"))
> setGeneric("foo",function(x) standardGeneric("foo"))
> setMethod("foo","numeric",function(x) "numeric")
> setMethod("foo","missingOrNULL",function(x) "NULL")
> foo(1)
[1] "numeric"
> foo()
[1] "NULL"
> foo(NULL)
[1] "NULL"
Run Code Online (Sandbox Code Playgroud)
setClassUnion 创建一个虚拟类,它是组件类的超类(父类),因此两个子类都从该类继承,这意味着您可以针对每个子类调度相同的函数.