克隆人的进击(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_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(___, ___)