如何克隆R6类

如何克隆R6类,r,r6,R,R6,这是关于克隆类,而不是实例化对象(这是其他一些问题所涉及的)。其目的是能够在不影响原始类的情况下装饰克隆类 我尝试使用一个子类,但它似乎只有在“decorator”函数中实例化一个新对象时才起作用,否则继承似乎不会发生 x = R6::R6Class("x", public = list(greeting = "hello")) y = R6::R6Class("y", public = list(greeting = "by

这是关于克隆类,而不是实例化对象(这是其他一些问题所涉及的)。其目的是能够在不影响原始类的情况下装饰克隆类

我尝试使用一个子类,但它似乎只有在“decorator”函数中实例化一个新对象时才起作用,否则继承似乎不会发生

x = R6::R6Class("x", public = list(greeting = "hello"))
y = R6::R6Class("y", public = list(greeting = "bye"))

decorate_and_instantiate = function(class, greet) {
  classToBeDecorated = R6::R6Class("classToBeDecorated", inherit = class)
  classToBeDecorated$set("public", "greet", greet)
  classToBeDecorated$new()
}

greet1 = decorate_and_instantiate(x, function() cat(self$greeting, "there!"))
greet1$greet()
#>hello there!

greet2 = decorate_and_instantiate(y, function() cat("Ok", self$greeting))
greet2$greet()
#>Ok bye

x$greet()
#>Error: attempt to apply non-function
# Because it is not affected by the decorator, which is what I want

总结一下我想要的:我想要一种机制来“克隆”
x
y
来创建一个新类,在这个类上我可以调用
$set()
,而不会影响
x
y
,理想情况下不需要上面的继承解决方法。

您好!如果继承没有函数的类,会有什么不同?因为您的函数也不是编辑原始类,而是编辑继承原始类的类。所以它不是克隆,而是继承