始める無料で始める

クローンの逆襲 (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_ovenassigned_microwave_oven という変数にコピーします。
  • a_microwave_ovenclone() メソッドを使って、cloned_microwave_oven という変数にコピーを作成します。
  • a_microwave_ovenpower_level_watts フィールドを 400 に変更します。
  • a_microwave_ovenassigned_microwave_ovenpower_level_watts フィールドが identical() であることを確認します(docs)。
  • a_microwave_ovencloned_microwave_ovenpower_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(___, ___)  
コードを編集して実行