Примітивні дженерик-функції
Деяка базова функціональність R визначена за допомогою примітивних функцій, які з міркувань продуктивності використовують спеціальну техніку доступу до C-коду. Приклади примітивних функцій: елементи мови, як-от if і for, оператори на кшталт + і $, а також математичні функції, як-от exp і sin. Серед примітивних функцій є й S3-дженерики; повний перелік примітивних S3-дженериків можна отримати за допомогою .S3PrimitiveGenerics (docs).
Коли S3-дженерик є примітивним, процес пошуку методів працює трохи інакше. R, як зазвичай, шукатиме методи за допомогою class (docs), але якщо нічого не знайдено, буде викликано внутрішню C-функцію. (Порівняйте це зі звичайними дженериками, де у разі відсутності методу виникає помилка.) Це означає, що якщо ви перевизначите клас об'єкта, фундаментальна поведінка, як-от обчислення довжини, не зламається.
Ця вправа є частиною курсу
Об'єктно-орієнтоване програмування з S3 та R6 в R
Інструкції до вправи
У вашому робочому середовищі до змінної hair присвоєно об'єкт списку, у якого клас перевизначено як "hairstylist".
- Перегляньте структуру
hairза допомогоюstr()(docs). - Виведіть усі примітивні S3-дженерики, про які знає R.
- Використайте функцію
exists()(docs), щоб перевірити, що функції з назвоюlength.hairstylistне існує. Зверніть увагу, що ця функція приймає символьний аргумент. - Обчисліть
length()(docs) для змінноїhair.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
# View the structure of hair
___
# What primitive generics are available?
___
# Does length.hairstylist exist?
___
# What is the length of hair?
___