Next Method を書く
オブジェクトが複数のクラスを持つとき、これら複数のクラスに対するメソッドを順に呼び出したい場合があります。これは NextMethod()(docs)で行います。
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()は呼び出さないでください。
- 引数は
what_am_i()にkittyを渡して呼び出し、3つのメッセージすべてが表示されることを確認します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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()
___