5 面向对象编程

5.1 小知识点

  1. is.object() 检查一个对象是不是纯基础类型,如果返回值为FALSE则是

  2. 使用methods()查看属于一个泛型函数的所有方法

  3. 还可以找出对某一个类型有定义方法的所有泛型函数(原文:We can also list all generics that have a method for a given class) methods(class = "ts")

  4. S3泛型函数的任务就是调用正确的S3方法

  5. 在R基础包中没有一个简单的方法可以检查一个对象是不是S3对象,可以使用最接近的方法:is.object() & !isS4(),或pryr::otype()

  6. 可以使用pryr::ftype()检查一个对象是S3方法还是S3泛函

  7. S3没有正式的类定义,为给一个类创建一个对象,只需使用已有的基础对象并设置类属性,例: foo <- structure(list(), class = "foo") 可以使用inherits(x, "class name")检查一个对象是否继承于一个特殊类

  8. 新建一个泛型函数

    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"
  9. 在S3和S4中方法属于函数(即方法是从函数中查找的),而在RC(参考类:Reference Class)中方法属于类

5.2 例子

我写过的一个桌面壁纸爬虫程序用到了S3方法,可以看看具体是怎么使用的。

点我跳转