面向对象编程
小知识点
-
is.object()
检查一个对象是不是纯基础类型,如果返回值为FALSE
则是 -
使用
methods()
查看属于一个泛型函数的所有方法 -
还可以找出对某一个类型有定义方法的所有泛型函数(原文:We can also list all generics that have a method for a given class)
methods(class = "ts")
-
S3泛型函数的任务就是调用正确的S3方法
-
在R基础包中没有一个简单的方法可以检查一个对象是不是S3对象,可以使用最接近的方法:
is.object() & !isS4()
,或pryr::otype()
-
可以使用
pryr::ftype()
检查一个对象是S3方法还是S3泛函 -
S3没有正式的类定义,为给一个类创建一个对象,只需使用已有的基础对象并设置类属性,例:
foo <- structure(list(), class = "foo")
可以使用inherits(x, "class name")
检查一个对象是否继承于一个特殊类 -
新建一个泛型函数
f <- function(x) UseMethod("f") f.default <- function(x) "Unknown class" f.a <- function(x) "Class a" f() #> [1] "Unknown class" f(structure(list(), class = "a")) #> [1] "Class a"
-
在S3和S4中方法属于函数(即方法是从函数中查找的),而在RC(参考类:Reference Class)中方法属于类
例子
我写过的一个桌面壁纸爬虫程序用到了S3方法,可以看看具体是怎么使用的。