撰寫 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()的catmethod 定義。 - 定義
what_am_i()的mammalmethod。- 引數與
catmethod 相同。 - 寫一個
message()輸出"I'm a mammal"。 - 呼叫
NextMethod()。
- 引數與
- 定義
what_am_i()的charactermethod。- 引數與
catmethod 相同。 - 寫一個
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()
___