Psaní metody NextMethod
Pokud má objekt více tříd, může být užitečné zavolat metody pro několik z nich. K tomu slouží NextMethod() (dokumentace).
S3 metody pak mají tuto podobu:
an_s3_method.some_class <- function(x, ...)
{
# Zpracuj some_class, pak
NextMethod("an_s3_method")
}
Jinak řečeno, NextMethod() by měl být posledním řádkem metody.
Toto cvičení je součástí kurzu
Objektově orientované programování s S3 a R6 v R
Pokyny k cvičení
Proměnná kitty a generická funkce what_am_i() jsou v tvém workspace předem definované.
- Prohlédni si workspace pomocí
ls.str(). - Dokonči definici metody
catprowhat_am_i().- Pomocí
message()(dokumentace) vypiš zprávu"I'm a cat". - Zavolej
NextMethod()(dokumentace) a předej mu název generické funkce jako řetězec.
- Pomocí
- Definuj metodu
mammalprowhat_am_i().- Argumenty jsou stejné jako u metody
cat. - Pomocí
message()vypiš zprávu"I'm a mammal". - Zavolej
NextMethod().
- Argumenty jsou stejné jako u metody
- Definuj metodu
characterprowhat_am_i().- Argumenty jsou stejné jako u metody
cat. - Pomocí
message()vypiš zprávu"I'm a character vector". NextMethod()nevolej.
- Argumenty jsou stejné jako u metody
- Zavolej
what_am_i()s argumentemkittya ověř, že se zobrazí všechny tři zprávy.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
# 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()
___