В зависимости от того, чего вы хотите достичь, это может быть осуществимо с помощью команды on.exit, как показано ниже:
test <- function(x, ...){
if(!is.integer(x))
stop("wups")
on.exit(cat("'On exit' executes after UseMethod, but before the value is returned. x = ", x,"\n"))
UseMethod("test")
}
test.integer <- function(x, ...){
cat("hello i am in a function\n")
x <- x + 3
cat("I am done calculating. x + 3 = ",x,"\n")
return(x)
}
test(1:3)
hello i am in a function
I am done calculating. x + 3 = 4 5 6
'On exit' executes after UseMethod, but before the value is returned. x = 1 2 3
[1] 4 5 6
Это не обязательно идеальное решение.Например, если кто-то хочет выполнить некоторые дополнительные вычисления для результата методов, результат не распространяется на универсальную функцию (так как UseMethod
не возвращает).Возможный обходной путь может заключаться в принудительном вводе среды в вызываемый метод для сохранения результатов в.