クローンの逆襲 (1)
R6 オブジェクトは environment と同様に参照によるコピー動作を行います。つまり、<- 代入で R6 オブジェクトをコピーすると、一方のオブジェクトでの変更がコピーにも反映されます。
a_reference_copy <- an_r6_object
R6 オブジェクトには、自動生成される clone() メソッドがあり、値によるコピーを作成できます。これにより、あるコピーでの変更が他のコピーに影響しません。
a_value <- an_r6_object$clone()
この演習はコースの一部です
R における S3 と R6 を使ったオブジェクト指向プログラミング
演習の手順
ワークスペースには、電子レンジのファクトリー microwave_oven_factory が定義済みです。
MicrowaveOvenオブジェクトを作成し、a_microwave_ovenに代入します。<-代入を使って、a_microwave_ovenをassigned_microwave_ovenという変数にコピーします。a_microwave_ovenのclone()メソッドを使って、cloned_microwave_ovenという変数にコピーを作成します。a_microwave_ovenのpower_level_wattsフィールドを400に変更します。a_microwave_ovenとassigned_microwave_ovenのpower_level_wattsフィールドがidentical()であることを確認します(docs)。a_microwave_ovenとcloned_microwave_ovenのpower_level_wattsフィールドがidentical()ではないことを確認します(docs)。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()
# Copy a_microwave_oven using <-
assigned_microwave_oven <- ___
# Copy a_microwave_oven using clone()
cloned_microwave_oven <- ___$___()
# Change a_microwave_oven's power level
___ <- ___
# Check a_microwave_oven & assigned_microwave_oven same
identical(___, ___)
# Check a_microwave_oven & cloned_microwave_oven different
identical(___, ___)