複製人的逆襲(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_oven的clone()方法,將該微波爐複製到名為cloned_microwave_oven的變數。 - 將
a_microwave_oven的power_level_watts欄位改為400。 - 驗證
a_microwave_oven與assigned_microwave_oven的power_level_watts欄位是identical()的(文件)。 - 驗證
a_microwave_oven與cloned_microwave_oven的power_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(___, ___)