编写 Next 方法
当对象具有多个类时,您可能希望依次调用这些类对应的方法。可以使用 NextMethod()(文档)实现。
S3 方法现在应写成如下形式:
an_s3_method.some_class <- function(x, ...)
{
# 先处理 some_class,然后
NextMethod("an_s3_method")
}
也就是说,NextMethod() 应该是方法的最后一行。
本练习是课程的一部分
R 中的 S3 与 R6 面向对象编程
练习说明
变量 kitty 和泛型函数 what_am_i() 已在您的工作区中预定义。
- 使用
ls.str()检查您的工作区。 - 完成
what_am_i()的cat方法定义。 - 定义
what_am_i()的mammal方法。- 参数与
cat方法相同。 - 使用
message()输出"I'm a mammal"。 - 调用
NextMethod()。
- 参数与
- 定义
what_am_i()的character方法。- 参数与
cat方法相同。 - 使用
message()输出"I'm a character vector"。 - 不要调用
NextMethod()。
- 参数与
- 以
kitty作为输入调用what_am_i(),确认会显示以上三条消息。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# 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()
___