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
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
catdlawhat_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.
- Napisz
- Zdefiniuj metodę
mammaldlawhat_am_i().- Argumenty są takie same jak w metodzie
cat. - Napisz
message()wyświetlający komunikat"I'm a mammal". - Wywołaj
NextMethod().
- Argumenty są takie same jak w metodzie
- Zdefiniuj metodę
characterdlawhat_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().
- Argumenty są takie same jak w metodzie
- Wywołaj
what_am_i()zkittyjako 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()
___