ПочатиПочніть безкоштовно

Написання 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().
    • Напишіть message() (docs) з текстом "I'm a cat".
    • Викличте NextMethod() (docs), передавши назву узагальненої функції як рядок.
  • Визначте метод 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()
___
Редагувати та запускати код