Что означает сообщение об ошибке «слот не существует»? - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь написать объект и получить доступ к его параметрам.У меня есть два файла, menus.R, где я определяю объект, и main.R, где я использую объект и пытаюсь получить доступ к слоту (параметру).

Код обоих файлов следующий:

menus.R

menu <- setClass("menu", slots=list(competition="numeric", stats="numeric"))
setMethod("show", "menu", function(object){
  while (TRUE){
    #Clean console
    cat("\014")
    cat("COMPARATIVA ENTRE EQUIPOS DE LA MISMA COMPETICION\n")
    cat("-------------------------------------------------\n\n")
    cat("1. Comparativa entre clubes de Liga DIA\n")
    cat("2. Comparativa entre clubes de Liga Femenina 2 - Grupo 'A'\n")
    cat("3. Comparativa entre clubes de Liga Femenina 2 - Grupo 'B'\n")
    cat("0. Salir\n\n")
    option <- readline("Selecciona opción: ")
    option <- suppressWarnings(as.numeric(option))
    if (!is.na(option)){
      if (option == 1){
        object@competition <- 14
      }
      if (option == 2){
        object@competition <- 22
      }
      if (option == 3){
        object@competition <- 23
      }
      readline("Espera ...")
      if (option == 0)
        break
    }else{
      readline("No es un número. Pulsa una tecla para introducir otra opción.")
    }
  }  
})

main.R

menu(competition=0, stats=0)
print(menu@competition)
getClass(class(menu))

Когда я звоню menu(competition=0, stats=0)Я вижу, что метод show дает мне.Это правильно.В методе show я присваиваю значение competition.Когда я выхожу из метода show, следующая инструкция - print(menu@competition), и вот где я получил эту ошибку:

Ошибка печати (меню @ соревнования): слот симя "Competition" для этого объекта класса "classGeneratorFunction"

Затем с getClass (класс (меню)) я получил это:

enter image description here

Что я делаю не так?Как я могу получить доступ к competition или stats?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы путаете конструктор объекта с самим объектом.

menu(competition = 0, stats=0) генерирует новый объект класса menu, но вы не можете его где-то сохранить, поэтому он печатается на экране. Поэтому ваш первый правильный вывод.

Но тогда вы хотите манипулировать объектом. Но ты не сохранил это! Вместо этого вы пытаетесь манипулировать «фабрикой объектов», menu(). Тип "фабрики объектов" - classGeneratorFunction, вот что вы видите.

Это должно работать:

myMenuObject <- menu(competition=0, stats=0)
print(myMenuObject)
print(myMenuObject@competition)
getClass(class(myMenuObject))
...