Kom igångKom igång gratis

Skriva nästa metod

När objekt har flera klasser kan du vilja anropa metoder för flera av dessa klasser. Det görs med NextMethod() (docs).

S3-metoderna har nu följande form:

an_s3_method.some_class <- function(x, ...)
{
  # Agera på some_class, sedan
  NextMethod("an_s3_method")
}

Det vill säga att NextMethod() ska vara metodens sista rad.

Den här övningen är en del av kursen

Objektorienterad programmering med S3 och R6 i R

Visa kurs

Övningsinstruktioner

Variabeln kitty och den generiska funktionen what_am_i() är fördefinierade i din arbetsyta.

  • Granska din arbetsyta med ls.str().
  • Slutför definitionen av metoden cat för what_am_i().
    • Skriv ett message() (docs) med texten "I'm a cat".
    • Anropa NextMethod() (docs) och skicka in den generiska funktionens namn som en sträng.
  • Definiera en metod mammal för what_am_i().
    • Argumenten är desamma som för metoden cat.
    • Skriv ett message() med texten "I'm a mammal".
    • Anropa NextMethod().
  • Definiera en metod character för what_am_i().
    • Argumenten är desamma som för metoden cat.
    • Skriv ett message() med texten "I'm a character vector".
    • Anropa inte NextMethod().
  • Anropa what_am_i() med kitty som indata och verifiera att alla tre meddelanden visas.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

# 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()
___
Redigera och kör kod