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

What does the “slot doesn't exist” error message mean?

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

Error in print(menu@competition) : there is no a slot with name "competition" for this object class "classGeneratorFunction"

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

我做错了什么?我怎样才能访问 competitionstats

您混淆了对象构造函数和对象本身。

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

但是,你想要操纵对象。但是你没有保存它!相反,您尝试操纵 "object factory"、menu()。 "object factory"的类型是classGeneratorFunction,这就是你看到的。

这应该有效:

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