访问实例化另一个 R6 class 的 R6 class 的元素
Access elements of an R6 class that instantiates another R6 class
假设我有一个 class SimpleClass
并且 class 的方法之一可以 return 另一个 class 的对象,例如
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()
,生成的对象将无法访问第一个对象的元素,除非我传递它们。有没有办法让第二个 class 访问第一个 class 的元素?
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
# NULL
请注意,我不想使用传统意义上的继承,因为我不想重新实例化第一个 class。我也不想将所有对象传递给 SimpleClass2$new()
.
您可以使 SimpleClass2 具有一个 Simpleclass 成员,并可以选择在其构造函数中传递一个 simpleclass:
SimpleClass <- R6::R6Class(
"SimpleClass",
public = list(
initialize = function() {
private$a <- 1
},
cls_two = function() SimpleClass2$new(self)
),
private = list(
a = numeric()
)
)
SimpleClass2 <- R6::R6Class(
"SimpleClass2",
public = list(
initialize = function(Simp1 = SimpleClass$new()) {
private$a <- Simp1
private$b <- 2
},
get_a = function() private$a
),
private = list(
a = SimpleClass$new(),
b = numeric()
)
)
它是这样工作的:
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
#> <SimpleClass>
#> Public:
#> clone: function (deep = FALSE)
#> cls_two: function ()
#> initialize: function ()
#> Private:
#> a: 1
扩展SimpleClass2
的构造函数,取一个SimpleClass
类型的对象,调用SimpleClass::cls_two
中的构造函数时传递self
:
SimpleClass2 <- R6::R6Class(
"SimpleClass2",
public = list(
initialize = function(obj) {
private$b <- 2
private$obj <- obj
},
get_a = function() private$obj
),
private = list(
b = numeric(),
obj = NULL
)
)
假设我有一个 class SimpleClass
并且 class 的方法之一可以 return 另一个 class 的对象,例如
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()
,生成的对象将无法访问第一个对象的元素,除非我传递它们。有没有办法让第二个 class 访问第一个 class 的元素?
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
# NULL
请注意,我不想使用传统意义上的继承,因为我不想重新实例化第一个 class。我也不想将所有对象传递给 SimpleClass2$new()
.
您可以使 SimpleClass2 具有一个 Simpleclass 成员,并可以选择在其构造函数中传递一个 simpleclass:
SimpleClass <- R6::R6Class(
"SimpleClass",
public = list(
initialize = function() {
private$a <- 1
},
cls_two = function() SimpleClass2$new(self)
),
private = list(
a = numeric()
)
)
SimpleClass2 <- R6::R6Class(
"SimpleClass2",
public = list(
initialize = function(Simp1 = SimpleClass$new()) {
private$a <- Simp1
private$b <- 2
},
get_a = function() private$a
),
private = list(
a = SimpleClass$new(),
b = numeric()
)
)
它是这样工作的:
first <- SimpleClass$new()
second <- first$cls_two()
second$get_a()
#> <SimpleClass>
#> Public:
#> clone: function (deep = FALSE)
#> cls_two: function ()
#> initialize: function ()
#> Private:
#> a: 1
扩展SimpleClass2
的构造函数,取一个SimpleClass
类型的对象,调用SimpleClass::cls_two
中的构造函数时传递self
:
SimpleClass2 <- R6::R6Class(
"SimpleClass2",
public = list(
initialize = function(obj) {
private$b <- 2
private$obj <- obj
},
get_a = function() private$obj
),
private = list(
b = numeric(),
obj = NULL
)
)