Поля ссылочного класса исчезают


Я решил дать справочным классам еще один шанс, но мой первый hello world уже дает мне проблемы. Что здесь происходит не так?

> memory <- setRefClass(
+   Class = "memory",
+   fields = list(state="vector"),
+   methods = list(
+     get = function() { return(state) },
+     set = function(x) { state <<- x }
+   )
+ )$new()

> memory$set(123)

> print(memory)
Reference class object of class "memory"
Field "state":
[1] 123

> memory$get()
[1] 123

> print(memory)
Reference class object of class "memory"
Field "state":
Error in methods::show(field(fi)) : 
  error in evaluating the argument 'object' in selecting a method for function 'show': Error in get(name, envir = .self) : 
  unused argument(s) (name, envir = .self)
1 3

1 ответ:

Я не очень опытен с ссылочными классами, но в соответствии со страницей справки (?ReferenceClasses), я думаю, что вы должны добавить метод show в свой класс, чтобы иметь возможность автоматически печатать ваш объект.

memory <- setRefClass(
          Class = "memory",
          fields = list(state="vector"),
          methods = list(
          get = function() { return(state) },
          set = function(x) { state <<- x },
          show = function() {methods::show(state)}
          )
          )$new()


memory$set(123)
print(memory)
#[1] 123

memory$get()
#[1] 123


print(memory)
#[1] 123

Надеюсь, что это поможет