开始使用免费开始使用

克隆人的进击 (2)

如果一个 R6 对象在其一个或多个字段中包含另一个 R6 对象,则默认情况下,clone() 会按引用复制这些 R6 字段。若要按值复制这些 R6 字段,必须以参数 deep = TRUE 调用 clone() 方法。

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(___, ___)  
编辑并运行代码