始める無料で始める

親クラスを公開する

既定では、R6 クラスは直接の親クラスの機能にしかアクセスできません。複数世代にまたがってアクセスできるようにするには、途中のクラスが親を公開するアクティブバインディングを定義する必要があります。形式は次のとおりです。

active = list(
  super_ = function() super
)

この演習はコースの一部です

R における S3 と R6 を使ったオブジェクト指向プログラミング

コースを見る

演習の手順

ワークスペースには、電子レンジのクラスがあらかじめ定義されています。

  • active リスト要素を追加して、ファンシー電子レンジのクラスを拡張してください。
  • 親の機能を公開するアクティブバインディングを追加します。
    • バインディング名は super_ とします。
    • 引数を取らず、単に super を返す関数にしてください。
  • ファンシー電子レンジのオブジェクトをインスタンス化し、a_fancy_microwave に代入します。
  • ファンシー電子レンジの super_ バインディングを呼び出してください。

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

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

# Expose the parent functionality
fancy_microwave_oven_factory <- R6Class(
  "FancyMicrowaveOven",
  inherit = microwave_oven_factory,
  public = list(
    cook_baked_potato = function() {
      self$cook(3)
    },
    cook = function(time_seconds) {
      super$cook(time_seconds)
      message("Enjoy your dinner!")
    }
  ),
  # Add an active element with a super_ binding
  ___ = ___(
    ___ = ___
  )
)

# Instantiate a fancy microwave
a_fancy_microwave <- ___

# Call the super_ binding
___
コードを編集して実行