我是 R6 和面向对象编程的新手,所以我不确定谈论对象内部字段之间依赖关系的正确方法。
我的对象具有依赖于对象内其他字段的字段。我希望这些依赖字段在更新其中一个输入时自动更新。
我已经想出了一种手动方法,但认为可能有更好的方法。我在田野里玩耍,active
但我无法让它们工作。
这个例子应该很清楚。我有一个quad
接受width
和height
计算的对象area
。我希望area
在更新时自动width
更新height
。
这似乎是活动领域旨在实现的目标之一,但我无法让它们发挥作用。
self$area
出于说明的目的,我通过在每个字段的set
方法中包含一个重新计算行来实现我的目标。
这应该怎么做?
library(R6)
quad <- R6Class("quad", public =
list(width = NULL,
height = NULL,
area = NULL,
initialize = function(width, height) {
self$width <- width
self$height <- height
self$area = self$width * self$height
self$greet()
},
set_width = function(W) {
self$width <- W
self$area = self$width * self$height #hack
},
set_height = function(H) {
self$height <- H
self$area = self$width * self$height #hack
},
greet = function() {
cat(paste0("your quad has area: ", self$area, ".\n"))
})
)
#
> quad1 <- quad$new(5, 5)
your quad has area: 25.
> quad1$set_height(10)
> quad1$area
[1] 50