1. 学ぶ
  2. /
  3. コース
  4. /
  5. R における S3 と R6 を使ったオブジェクト指向プログラミング

Connected

演習

Next Method を書く

オブジェクトが複数のクラスを持つとき、これら複数のクラスに対するメソッドを順に呼び出したい場合があります。これは NextMethod()(docs)で行います。

S3 メソッドは次の形になります。

an_s3_method.some_class <- function(x, ...)
{
  # some_class に対する処理を行い、その後
  NextMethod("an_s3_method")
}

つまり、NextMethod() はメソッドの最後の行に書きます。

指示

100 XP

変数 kitty と、ジェネリック関数 what_am_i() はワークスペースにあらかじめ用意されています。

  • ls.str() でワークスペースを確認します。
  • what_am_i() の cat メソッド定義を完成させます。
    • message()(docs)で "I'm a cat" と表示します。
    • ジェネリック名を文字列で渡して NextMethod()(docs)を呼び出します。
  • 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つのメッセージすべてが表示されることを確認します。