De volgende methode schrijven
Wanneer objecten meerdere klassen hebben, wil je soms methoden voor meerdere van deze klassen aanroepen. Dit doe je met NextMethod() (docs).
De S3-methoden krijgen dan de vorm:
an_s3_method.some_class <- function(x, ...)
{
# Act on some_class, then
NextMethod("an_s3_method")
}
Met andere woorden: NextMethod() hoort de laatste regel van de methode te zijn.
Deze oefening maakt deel uit van de cursus
Objectgeoriënteerd programmeren met S3 en R6 in R
Oefeninstructies
De variabele kitty en de generieke functie what_am_i() zijn al voor je klaargezet in je werkruimte.
- Inspecteer je werkruimte met
ls.str(). - Maak de definitie af van de
cat-methode voorwhat_am_i(). - Definieer een
mammal-methode voorwhat_am_i().- De argumenten zijn hetzelfde als voor de
cat-methode. - Schrijf een
message()met de tekst"I'm a mammal". - Roep
NextMethod()aan.
- De argumenten zijn hetzelfde als voor de
- Definieer een
character-methode voorwhat_am_i().- De argumenten zijn hetzelfde als voor de
cat-methode. - Schrijf een
message()met de tekst"I'm a character vector". - Roep
NextMethod()juist niet aan.
- De argumenten zijn hetzelfde als voor de
- Roep
what_am_i()aan metkittyals invoer en controleer dat alle drie de berichten worden getoond.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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()
___