始める無料で始める

調理機能のさらに上書き

中間クラスが super_ アクティブバインディングで親の機能を公開していれば、R6 クラスの複数世代にわたってメソッドへアクセスできます。構文は次のとおりです。

parent_method <- super$method()
grand_parent_method <- super$super_$method()
great_grand_parent_method <- super$super_$super_$method()

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

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

コースを見る

演習の手順

電子レンジクラスと高機能電子レンジクラスは、ワークスペースにあらかじめ用意されています。文字列 ascii_pizza_slice も定義済みです。

  • 他の電子レンジのファクトリを、名前を出力して確認しましょう。
  • R6Class()docs)を使って HighEndMicrowaveOven クラスジェネレータを定義し、high_end_microwave_oven_factory に代入します。
    • FancyMicrowaveOven を継承させます。
    • public リスト要素を持たせます。
  • public の cook() メソッドをオーバーライドします。
    • メソッドは time_seconds という単一の引数を取ります。
    • MicrowaveOvencook() メソッドを呼び出し、…
    • その後、message(ascii_pizza_slice)docs)でピザのスライスを表示します。
  • ハイエンド電子レンジのオブジェクトをインスタンス化し、a_high_end_microwave に代入します。
  • a_high_end_microwavecook() メソッドを呼び出し、1 秒間調理します。

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

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

# Explore other microwaves
microwave_oven_factory
fancy_microwave_oven_factory

# Define a high-end microwave oven class
high_end_microwave_oven_factory <- ___(
 "___",
  ___ = ___,
  ___ = ___(
    ___ = ___
    
    
    
  )
)

# Instantiate a high-end microwave oven
a_high_end_microwave <- ___

# Use it to cook for one second
___
コードを編集して実行