开始使用免费开始使用

克隆人的进击(1)

R6 对象与环境一样,采用按引用复制的行为。也就是说,如果使用 <- 赋值来复制一个 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(___, ___)  
编辑并运行代码