Aan de slagGa gratis aan de slag

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

Cursus bekijken

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 voor what_am_i().
    • Schrijf een message() (docs) met de tekst "I'm a cat".
    • Roep NextMethod() (docs) aan en geef de naam van de generiek als string door.
  • Definieer een mammal-methode voor what_am_i().
    • De argumenten zijn hetzelfde als voor de cat-methode.
    • Schrijf een message() met de tekst "I'm a mammal".
    • Roep NextMethod() aan.
  • Definieer een character-methode voor what_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.
  • Roep what_am_i() aan met kitty als 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()
___
Code bewerken en uitvoeren