【发布时间】:2020-09-01 19:53:08
【问题描述】:
假设我有一个类 SimpleClass 并且该类的方法之一可以返回另一个类的对象,例如
SimpleClass <- R6::R6Class(
"SimpleClass",
public = list(
initialize = function() {
private$a <- 1
},
cls_two = function() SimpleClass2$new()
),
private = list(
a = numeric()
)
)
SimpleClass2 在哪里
SimpleClass2 <- R6::R6Class(
"SimpleClass2",
public = list(
initialize = function() {
private$b <- 2
},
get_a = function() private$a
),
private = list(
b = numeric()
)
)
在这里,如果我实例化 SimpleClass 并调用方法 cls_two(),则生成的对象将无法访问第一个对象的元素,除非我传递它们。二级类有没有办法访问一级类的元素?
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
# NULL
请注意,我不想使用传统意义上的继承,因为我不想重新实例化第一个类。我也希望不必将所有对象都传递给SimpleClass2$new()。
【问题讨论】:
-
我最近遇到了类似的问题,通过共享环境解决了。基本上在 SimpleClass init 方法中创建一个环境并将该环境传递给类 SimpleClass2 的第二个对象。另一个选项是将 SimpleClass“self”直接传递给您使用 SimpleClass2$new() 实例化的对象。如果您需要示例,请告诉我,我可以创建它。
-
是的,这不是一个坏主意。我已经考虑过包内的共享环境,但是在类内是个好主意!如果 R6 没有内置的方法来做到这一点,我会感到惊讶。