開始使用免費開始

複製人的逆襲(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
  • 使用 <- 指派,將該微波爐複製到名為 assigned_microwave_oven 的變數。
  • 使用 a_microwave_ovenclone() 方法,將該微波爐複製到名為 cloned_microwave_oven 的變數。
  • a_microwave_ovenpower_level_watts 欄位改為 400
  • 驗證 a_microwave_ovenassigned_microwave_ovenpower_level_watts 欄位是 identical() 的(文件)。
  • 驗證 a_microwave_ovencloned_microwave_ovenpower_level_watts 欄位不是 identical() 的(文件)。

動手互動練習

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

# 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(___, ___)  
編輯並執行程式碼