“插槽不存在”错误消息是什么意思?

时间:2018-11-13 09:43:09

标签: r oop s4

我正在尝试编写一个对象并访问其参数。我有两个文件,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),这是我收到此错误的地方:

  

打印错误(menu @ competition):没有名称为的插槽   该对象类“ classGeneratorFunction”的“竞争”

然后用getClass(class(menu))我得到了:

enter image description here

我在做什么错?如何获得对competitionstats的访问权限?

1 个答案:

答案 0 :(得分:1)

您正在将对象构造函数与对象本身混淆。

Replace会为您生成一个类menu(competition = 0, stats=0)的新对象,但是您无法将其保存在某处,因此它会在屏幕上打印。因此,您的第一个正确输出。

但是,您想操纵对象。但是您没有保存!而是尝试操纵“对象工厂” menu。您将看到“对象工厂”的类型为menu()

这应该有效:

classGeneratorFunction