R ссылочные классы как поле ссылочного класса
Я хотел бы передать ссылочный класс конструктору ссылочного класса и назначить переданный ссылочный класс в качестве поля. Однако, когда я запускаю приведенный ниже код, я не понимаю, почему я получаю ошибку. Мои вопросы:
1) Пожалуйста, кто-нибудь может объяснить, почему происходит эта ошибка:
> a <- ClassA&new()
Error in .getClassFromCache(Class, where) :
argument "Class" is missing, with no default
> b <- ClassB$new(a)
Error in .Object$initialize(...) : object 'a' not found
2) Я объявил class.a.container как класс "list", однако я хочу, чтобы это был ссылочный класс. Что мне нужно поставить здесь вместо "списка"?
ClassA <- setRefClass(
"ClassA",
fields = list(myVar = "numeric"),
methods = list(
someMethod = function(){
print("hi")
}
)
)
ClassB <- setRefClass(
"ClassB",
fields = list(class.a.container = "list"),
methods = list(
initialize = function(class.a){
class.a.container <<- class.a
})
)
a <- ClassA&new()
b <- ClassB$new(a)
2 ответа
Ты будешь чувствовать себя глупо, по крайней мере, я, когда заметил проблему. В извлечении из предмета envirnment-class у вас есть знак амперсанда со знаком доллара.
a <- ClassA$new(myVar=1)
a$someMethod(2)
#[1] "hi
42- уже указал на одну ошибку в вашем коде (& вместо $).
Чтобы полностью ответить на ваш первоначальный вопрос, я просто хочу прямо указать, что после исправления этой ошибки вам нужно изменить объявление поля в ClassB с
class.a.container = "list"
в
class.a.container = "ClassA"
Вот полный код, который работает для меня:
ClassA = setRefClass(
Class = "ClassA",
fields = list(myVar = "numeric"),
methods = list(
someMethod = function() {
print("hi")
}
)
)
ClassB = setRefClass(
Class = "ClassB",
fields = list(class.a.container = "ClassA"),
methods = list(
initialize = function(class.a) {
class.a.container <<- class.a
}
)
)
a = ClassA$new(myVar = 1)
a
b = ClassB$new(a)
b
Это печатает:
...
> a
Reference class object of class "ClassA"
Field "myVar":
[1] 1
>
> b = ClassB$new(a)
> b
Reference class object of class "ClassB"
Field "class.a.container":
Reference class object of class "ClassA"
Field "myVar":
[1] 1