我是R6班的新手,我开始掌握窍门了。但是,我目前正在嵌套类,我想循环遍历特定嵌套类的列表。因此,如下面的示例所示,Person
类的一些元素本身就是类,如BodyPart
类,它通过Person
类的arm
,leg
和head
元素合并。Person
类还包含感兴趣的子类列表(bodyParts
,作为对它们进行分组的一种方式)。Person
类中的getVolume
函数循环遍历列表并捕获感兴趣的特定子类。
一个简单而愚蠢的例子:
BodyPart <- R6::R6Class(classname = "BodyPart",
public = list(
width = numeric(),
volume = numeric(),
initialize = function(name = NA, width = 3, volume = 2){
self$name <- name
self$width <- width
self$volume <- volume
}
)
)
Person <- R6::R6Class(classname = "Person",
public = list(
name = character(),
age = numeric(),
bodyParts = list(),
arm = environment(),
leg = environment(),
head = environment(),
initialize = function(name = NA, age = NA, bodyParts = list("arm", "leg", "head"), arm = NA, leg = NA, head = NA){
self$name <- name
self$age <- age
self$bodyParts <- bodyParts
self$arm <- arm
self$leg <- leg
self$head <- head
},
getVolume = function(){
for(bodyPart in self$bodyParts){
volume <- get(bodyPart)$volume
print(paste(bodyPart, volume))
}
}
)
)
LongArm <- BodyPart$new()
MediumLeg <- BodyPart$new()
CubeHead <- BodyPart$new()
Person <- Person$new(name = "Jake", age = 20, arm = LongArm, leg = MediumLeg, head = CubeHead)
Person$getVolume()
这段代码对一般的类(那些在Person
类的**外部定义的类)有效,但对附加的子类无效,因为我不知道如何将self$
部分合并到循环中。
我知道上面的例子有点愚蠢和间接,但想法是一样的。最终的计划是允许自定义数量的子类(使用...
),这些子类可以通过bodyParts
列表进行选择,允许函数同时与自定义数量的特定子类进行交互。
有人知道如何在R6类中选择特定的子类吗?或者,对于这个问题,另一种方法可能更有效?
非常感谢提前!
1条答案
按热度按时间sxpgvts31#
我发现了一个非常简单的解决方法:将所有的bodyparts(子类)列在一起,并让类将列表作为属性/元素。然后循环遍历
self$list
以获得所需的任何值。这就是
希望这对其他人也有帮助!