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

Reference to other object as reference class field

本文关键字:引用 字段 其他 对象      更新时间:2023-10-16

我来自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,我不希望那个字段被实例化,稍后我会给它赋值。

您似乎在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