让R在可能的时候调用NextMethod

时间:2014-11-02 12:55:22

标签: r oop

我正在尝试让R在有下一个类时调用NextMethod:

e = new.env()
class(e) = c(class(e), "c11", "c22")
print.c11 = function(e, ...) {
    print(e$x); 
    tryCatch({
        NextMethod()
    }, warning = function(w) {
    }, error = function(e) {
    }, finally = {
    })
}
print.c22 = function(e, ...) {
    print(e$y)
    tryCatch({
        NextMethod()
    }, warning = function(w) {
    }, error = function(e) {
    }, finally = {
    })
}
e$x = 111
e$y = 222
print(e)

这是一个肮脏的黑客,它将涵盖该方法可能产生的所有错误和警告。怎么能这样做呢?


上面的代码类型没有tryCatch块,因为我认为调用了print.default函数。现在举一个例子(修改过)Hadley的高级R书:

> baz <- function(x) UseMethod("baz", x)
> baz.c <- function(x) c("c", NextMethod())
> baz.d <- function(x) c("d", NextMethod())
> c <- structure(1, class = c("c", "d"))
> baz(c)
 Show Traceback

 Rerun with Debug
 Error in NextMethod() : no method to invoke 

理想情况下,如果没有下一个类,NextMethod函数应该返回NULL。

1 个答案:

答案 0 :(得分:2)

实施默认方法,例如

baz.default <- function(x) NULL

> c <- structure(1, class = c("c", "d"))
> baz(c)
[1] "c" "d"