读取功率等级
R6 对象存储的数据被刻意隐藏在 private 元素中,以此来对用户不可见。这就是"封装"(encapsulation)原则。
如果您想让外部访问某些数据值,可以使用"活动绑定"(active binding)。它们是看起来像变量、但本质上是函数的机制。
活动绑定存放在 R6 对象的 active 元素中。若要创建一个用于获取私有数据字段的活动绑定(即"只读"绑定),请创建一个无参数的函数,直接返回对应的私有元素。
创建只读活动绑定的模式如下:
thing_factory <- R6Class(
"Thing",
private = list(
..a_field = "a value"
),
active = list(
a_field = function() {
private$..a_field
}
)
)
调用活动绑定时应像访问数据变量,而不是调用函数。
a_thing <- thing_factory$new()
a_thing$a_field # 不是 a_thing$a_field()
本练习是课程的一部分
R 中的 S3 与 R6 面向对象编程
练习说明
已为您部分定义了一个微波炉工厂。
- 更新定义,加入一个用于获取功率等级的只读活动绑定。
- 活动绑定名称应为
power_rating_watts。 - 它应定义为无参数的函数。
- 函数体只需返回私有字段
..power_rating_watts。
- 活动绑定名称应为
- 创建一个微波炉对象,并将其赋值给
a_microwave_oven。 - 读取它的功率等级。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Add a binding for power rating
microwave_oven_factory <- R6Class(
"MicrowaveOven",
private = list(
..power_rating_watts = 800
),
active = list(
# Add the binding here
___ = ___
)
)
# Make a microwave
a_microwave_oven <- ___
# Get the power rating
___