许多语言都有特殊的方式来处理未知方法 ( examples )。我最熟悉的是Python的__getattr__
。如果有人调用您尚未为类定义的方法,__getattr__
将充当包罗万象的角色并执行某些操作。
我一直在阅读 S4 和 R6 的一些内容,但我还没有找到如何在 R 中做到这一点。这可能吗?
最佳答案
不,没有像在 python 中那样从类定义内部执行此操作的标准方法。
在Python中你会做类似MyObject.my_method()
的事情,而在R中使用S3或S4这将是my_method(MyObject)
所以它看起来和my_function(MyObject)
一模一样。唯一的区别是,在底层,您调用的函数将调用分派(dispatch)给适当的方法。为多个类定义这些方法如下:
mean <- function (x, ...) UseMethod("mean", x)
mean.numeric <- function(x, ...) sum(x) / length(x)
mean.data.frame <- function(x, ...) sapply(x, mean, ...)
mean.matrix <- function(x, ...) apply(x, 2, mean)
mean.default <- function(x, ...) {
# do something
}
但是,如果您在尚未定义方法的类上调用mean函数,则由函数来处理此问题,而不是由类来处理。
然后你有 RC 和 S6 对象,它们具有更像 python 的语法 (MyObject$my_method()
),但是它们只会抛出一个错误:您使用的类没有相应的字段或方法。
Error in envRefInferField(x, what, getClass(class(x)), selfEnv) :
"my_method" is not a valid field or method name for reference class “MyObject”
关于r - 如何处理 R 中的未知方法/泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56668510/