Написання NextMethod
Коли об'єкти мають кілька класів, ви можете захотіти викликати методи для кількох із цих класів. Це робиться за допомогою NextMethod() (docs).
Методи S3 тепер мають вигляд:
an_s3_method.some_class <- function(x, ...)
{
# Дія для some_class, потім
NextMethod("an_s3_method")
}
Тобто NextMethod() має бути останнім рядком методу.
Ця вправа є частиною курсу
Об'єктно-орієнтоване програмування з S3 та R6 в R
Інструкції до вправи
Змінна kitty та узагальнена функція what_am_i() вже визначені у вашому робочому середовищі.
- Перегляньте робоче середовище за допомогою
ls.str(). - Завершіть визначення методу
catдляwhat_am_i(). - Визначте метод
mammalдляwhat_am_i().- Аргументи такі самі, як і для методу
cat. - Напишіть
message()з текстом"I'm a mammal". - Викличте
NextMethod().
- Аргументи такі самі, як і для методу
- Визначте метод
characterдляwhat_am_i().- Аргументи такі самі, як і для методу
cat. - Напишіть
message()з текстом"I'm a character vector". - Не викликайте
NextMethod().
- Аргументи такі самі, як і для методу
- Викличте
what_am_i()зkittyяк вхідним аргументом і переконайтеся, що відображено всі три повідомлення.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# 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()
___