【发布时间】:2019-02-20 12:15:17
【问题描述】:
我是 R6 和面向对象编程的新手,所以我不确定如何正确地谈论对象内部字段之间的依赖关系。
我的对象的字段依赖于对象内的其他字段。我希望这些依赖字段在更新其中一个输入时自动更新。
我想出了一种手动的方法,但认为可能有更好的方法。我玩弄了active 字段,但我无法让它们工作。
这个例子应该很清楚。我有一个对象quad 接受width 和height 并计算area。我希望area 在width 或height 更新时自动更新。
这似乎是活动领域旨在实现的目标之一,但我无法让它们发挥作用。
出于说明的目的,我通过在每个字段的 set 方法中包含 self$area 的重新计算行来达到我的目标。
这应该怎么做?
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
【问题讨论】: