开始使用免费开始使用

读取功率等级

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