Zacznij terazZacznij za darmo

Pisanie następnej metody

Gdy obiekty należą do wielu klas, możesz chcieć wywołać metody dla kilku z nich. Służy do tego NextMethod() (dokumentacja).

Metody S3 przyjmują teraz następującą postać:

an_s3_method.some_class <- function(x, ...)
{
  # Działaj na some_class, a następnie
  NextMethod("an_s3_method")
}

Inaczej mówiąc, NextMethod() powinno być ostatnią linią metody.

To ćwiczenie jest częścią kursu

Programowanie obiektowe z S3 i R6 w R

Zobacz kurs

Instrukcje do ćwiczenia

Zmienna kitty oraz funkcja generyczna what_am_i() zostały wcześniej zdefiniowane w twoim środowisku.

  • Sprawdź zawartość środowiska za pomocą ls.str().
  • Uzupełnij definicję metody cat dla what_am_i().
    • Napisz message() (dokumentacja) wyświetlający komunikat "I'm a cat".
    • Wywołaj NextMethod() (dokumentacja), przekazując nazwę funkcji generycznej jako ciąg znaków.
  • Zdefiniuj metodę mammal dla what_am_i().
    • Argumenty są takie same jak w metodzie cat.
    • Napisz message() wyświetlający komunikat "I'm a mammal".
    • Wywołaj NextMethod().
  • Zdefiniuj metodę character dla what_am_i().
    • Argumenty są takie same jak w metodzie cat.
    • Napisz message() wyświetlający komunikat "I'm a character vector".
    • Nie wywołuj NextMethod().
  • Wywołaj what_am_i() z kitty jako argumentem i sprawdź, czy wszystkie trzy komunikaty są wyświetlane.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

# 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()
___
Edytuj i uruchom kod