讀取評等
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
___