Bắt đầu ngayBắt đầu miễn phí

Viết Next Method

Khi một đối tượng có nhiều class, bạn có thể muốn gọi các method cho nhiều class đó. Điều này được thực hiện bằng NextMethod() (tài liệu).

Các S3 method hiện có dạng:

an_s3_method.some_class <- function(x, ...)
{
  # Xử lý cho some_class, sau đó
  NextMethod("an_s3_method")
}

Tức là, NextMethod() nên là dòng cuối cùng của method.

Bài tập này là một phần của khóa học

Lập trình hướng đối tượng với S3 và R6 trong R

Xem khóa học

Hướng dẫn bài tập

Biến kitty và hàm generic what_am_i() đã được định nghĩa sẵn trong workspace của bạn.

  • Khám phá workspace bằng ls.str().
  • Hoàn thiện định nghĩa method cat cho what_am_i().
    • Gọi message() (tài liệu) với nội dung "I'm a cat".
    • Gọi NextMethod() (tài liệu), truyền tên của generic dưới dạng chuỗi.
  • Định nghĩa method mammal cho what_am_i().
    • Tham số giống như method cat.
    • Gọi message() với nội dung "I'm a mammal".
    • Gọi NextMethod().
  • Định nghĩa method character cho what_am_i().
    • Tham số giống như method cat.
    • Gọi message() với nội dung "I'm a character vector".
    • Không gọi NextMethod().
  • Gọi what_am_i() với kitty làm đầu vào, và kiểm tra rằng cả ba thông điệp đều được hiển thị.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

# 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()
___
Chỉnh sửa và Chạy Mã