開始使用免費開始

讀取評等

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
___
編輯並執行程式碼