始める無料で始める

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 メソッド定義を完成させます。
    • 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つのメッセージすべてが表示されることを確認します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# 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()
___
コードを編集して実行