2015-12-09 2 views
1

Я исхожу из фона 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

C не имеет классов. –

+0

Не могли бы вы продемонстрировать, что вы пытаетесь сделать с (небольшим) примером в C? – nrussell

+0

Это не похоже на программирование на C (возможно, на программирование на С ++), предлагая удалить тег 'c' – user3629249

ответ

0

Похоже, вы используете ссылочные классы в R. Если да, то вы можете просто определить

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

Как я уверен, вы можете догадаться, это не исполнение, что anotherObject имеет класс foo, но нет причин, по которым вы не можете установить это значение как объект класса foo. Фактически, это ускорит работу (в противном случае ваш объект проверит класс anotherObject каждые, когда ваш объект будет изменен). Таким образом, нужная ссылка поведение (без класса исполнения) может быть реализованы

myObj1 <- new('foo') 
myObj2 <- new('foo') 
myObj1$anotherObject <- myObj2 

Для иллюстрации эталонного поведения, рассмотрит

myObj1$anotherObject$anotherObject <- 1 
myObj2$anotherObject 
[1] 2 
Смежные вопросы