引用其他对象作为引用类字段

时间:2015-12-09 19:31:52

标签: c++ r class oop

我来自C ++背景,我正在尝试学习R.当我想要一个对象使用C ++类跟踪另一个已经存在的对象时,我只想添加一个指针成员。我知道R默认情况下不支持指针,但我需要将这个功能添加到我的引用类中。

在C ++中我会做类似

的事情
class foo
{
public:
    foo *pAnotherFoo;
}

如果我尝试做类似的事情 foo <- setRefClass( "foo", fields = list(another = "foo") ) 我显然得到Error: evaluation nested too deeply: infinite recursion....,因为R试图实例化对象,将实例化另一个对象等等(我认为?)。

我想知道是否有某种方法告诉R我不希望该字段被实例化,我稍后会为其分配一个值。

1 个答案:

答案 0 :(得分:0)

看来你在R中使用引用类。如果是这样,你可以简单地定义

foo <- setRefClass('foo', 
       fields = list(anotherObject = 'ANY'))

我确定你可以猜到,强制anotherObject属于foo类,但没有理由你不能将此值设置为类foo的对象。实际上,这样做会加快性能(否则,您的对象将检查另一个对象的类您的对象被更改的每个时间)。因此,您可以通过

实现所需的参考行为(没有类强制执行)
myObj1 <- new('foo')
myObj2 <- new('foo')
myObj1$anotherObject <- myObj2

为了说明参考行为,请考虑

myObj1$anotherObject$anotherObject <- 1
myObj2$anotherObject
[1] 2