親クラスを公開する
既定では、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
___