開始使用免費開始

撰寫 Next Method

當物件有多個類別時,你可能會想依序呼叫其中多個類別的 method。可以使用 NextMethod()文件)來達成。

S3 method 現在的形式為:

an_s3_method.some_class <- function(x, ...)
{
  # 先處理 some_class,然後
  NextMethod("an_s3_method")
}

也就是說,NextMethod() 應該是 method 的最後一行。

本練習屬於課程

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

檢視課程

練習說明

變數 kitty 與泛型函式 what_am_i() 已預先定義在你的工作區。

  • 使用 ls.str() 檢視你的工作區。
  • 完成 what_am_i()cat method 定義。
    • 寫一個 message()文件)輸出 "I'm a cat"
    • 呼叫 NextMethod()文件),並以字串傳入該泛型的名稱。
  • 定義 what_am_i()mammal method。
    • 引數與 cat method 相同。
    • 寫一個 message() 輸出 "I'm a mammal"
    • 呼叫 NextMethod()
  • 定義 what_am_i()character method。
    • 引數與 cat method 相同。
    • 寫一個 message() 輸出 "I'm a character vector"
    • 不要呼叫 NextMethod()
  • kitty 作為輸入呼叫 what_am_i(),確認三段訊息都會顯示。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Inspect your workspace
ls.str()

# cat method
what_am_i.cat <- function(x, ...)
{
  # Write a message
  ___
  # Call NextMethod
  ___
}

# mammal method
___ <- ___

# character method
___ <- ___

# Call what_am_i()
___
編輯並執行程式碼