類別太多了

在 R 中使用 S3 與 R6 的物件導向程式設計

Richie Cotton

Data Evangelist at DataCamp

x <- c(1, 3, 6, 10, 15)

class(x) <- c( "triangular_numbers", "natural_numbers", "numeric" )
在 R 中使用 S3 與 R6 的物件導向程式設計
is.numeric(x)
TRUE
is.triangular_numbers(x)
Error: could not find function "is.triangular_numbers"
在 R 中使用 S3 與 R6 的物件導向程式設計
inherits(x, "triangular_numbers")
TRUE
inherits(x, "natural_numbers")
TRUE
inherits(x, "numeric")
TRUE
在 R 中使用 S3 與 R6 的物件導向程式設計
what_am_i <- function(x, ...) {
  UseMethod("what_am_i")
}
在 R 中使用 S3 與 R6 的物件導向程式設計
what_am_i.triangular_numbers <- function(x, ...) {
  message("I'm triangular numbers")
  NextMethod("what_am_i")
}
what_am_i.natural_numbers <- function(x, ...) {
  message("I'm natural numbers")
  NextMethod("what_am_i")
}
what_am_i.numeric <- function(x, ...) {
  message("I'm numeric")
}
在 R 中使用 S3 與 R6 的物件導向程式設計
what_am_i(x)
I'm triangular numbers
I'm natural numbers
I'm numeric

第 2 章第 4 節:類別太多.017 圖

在 R 中使用 S3 與 R6 的物件導向程式設計
what_am_i(x)
I'm triangular numbers
I'm natural numbers
I'm numeric

第 2 章第 4 節:類別太多.018 圖

在 R 中使用 S3 與 R6 的物件導向程式設計
what_am_i(x)
I'm triangular numbers
I'm natural numbers
I'm numeric

第 2 章第 4 節:類別太多.019 圖

在 R 中使用 S3 與 R6 的物件導向程式設計
what_am_i(x)
I'm triangular numbers
I'm natural numbers
I'm numeric

第 2 章第 4 節:類別太多.020 圖

在 R 中使用 S3 與 R6 的物件導向程式設計

重點總結

  • 可同時有「多個類別」
  • inherits() 測試「任意類別」
  • NextMethod()「串接方法呼叫」
在 R 中使用 S3 與 R6 的物件導向程式設計

一起來練習吧!

在 R 中使用 S3 與 R6 的物件導向程式設計

Preparing Video For Download...