開始使用免費開始

複製人大進擊(2)

如果一個 R6 物件在一個或多個欄位中包含了另一個 R6 物件,則預設情況下,clone() 會以參考方式複製這些 R6 欄位。若要以值的方式複製這些 R6 欄位,必須在呼叫 clone() 方法時傳入引數 deep = TRUE

a_deep_copy <- an_r6_object$clone(deep = TRUE)

本練習屬於課程

在 R 中使用 S3 與 R6 的物件導向程式設計

檢視課程

練習說明

你的工作空間中已預先定義描述微波爐電源插頭的 PowerPlug R6 類別。MicrowaveOven 類別已更新,包含一個 PowerPlug 物件。

  • 建立一個 MicrowaveOven 物件並指定給 a_microwave_oven
  • 使用沒有引數的 clone() 方法,將微波爐複製到名為 cloned_microwave_oven 的變數中。
  • 使用 clone() 方法並傳入 deep = TRUE,將微波爐複製到名為 deep_cloned_microwave_oven 的變數中。
  • a_microwave_ovenpower_plug 欄位中的 type 欄位改為 "British"
  • 驗證 a_microwave_ovencloned_microwave_ovenpower_plug$type 欄位相同。
  • 驗證 a_microwave_ovendeep_cloned_microwave_ovenpower_plug$type 欄位不同。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Create a microwave oven
a_microwave_oven <- microwave_oven_factory$new()

# Look at its power plug
a_microwave_oven$power_plug

# Copy a_microwave_oven using clone(), no args
cloned_microwave_oven <- ___
  
# Copy a_microwave_oven using clone(), deep = TRUE
deep_cloned_microwave_oven <- ___
  
# Change a_microwave_oven's power plug type  
___$___ <- ___
  
# Check a_microwave_oven & cloned_microwave_oven same 
identical(___, ___)

# Check a_microwave_oven & deep_cloned_microwave_oven different 
identical(___, ___)  
編輯並執行程式碼