【发布时间】:2018-12-26 18:19:22
【问题描述】:
假设我有一个 R6 类,其中一个元素是指向某个 C++ 对象的外部指针。
所以我有这样的事情:
myClass <- R6::R6Class(
"myClass",
public = list(
xp = NULL,
initialize = function(x) {
self$xp = cpp_fun_that_returns_a_pointer(x)
}
)
)
如果我使用myclass$clone(),它仍然会指向相同的myclass$xp。如果我这样做myclass$clone(deep = TRUE) 也会发生这种情况,因为它不知道如何在 C++ 端进行克隆。
在这种情况下,我可以使用自定义的deep_clone 方法...
但由于在我的用例中,如果没有深度克隆克隆类总是错误的,我想知道是否可以直接更改clone 的行为。
我尝试创建一个 clone() 方法,但 R6 不允许这样做。
Error in R6::R6Class("tensor", cloneable = FALSE, private = list(xp = NULL), :
Cannot add a member with reserved name 'clone'.
【问题讨论】:
-
当然。你可以把它改成你想要的。您可以使用
myClass$clone_method查看当前代码并使用myClass$clone_method <- NewCode分配新代码 -
不确定它是否有效。
clone似乎没有在课堂上调用任何clone_method。