Question

J'ai besoin d'écrire une méthode qui met à jour simultanément un objet et renvoie une valeur. Je veux savoir s'il existe un moyen de le faire dans les classes S4. Le contexte est que j'essaie d'écrire une classe S4 pour générer une liste dont chaque élément ne peut être accessible que si une clé privée est connue. Pour ce faire, j'ai besoin d'une méthode getNewslot qui met simultanément à la mise à jour la longueur de la liste et de la liste des clés et renvoie la paire de clés d'index. Le code est fourni ci-dessous:

setClass("ProtectedRObjectList", 
  representation(objectList = "list", keys = "character", length = "numeric"))

setGeneric(
  name = "getNewSlot",
  def = function(object,value){standardGeneric("getNewSlot")})

setMethod(
  f = "getNewSlot", 
  signature = "ProtectedRObjectList", 
  definition = function(object){
    if(length(object@length)==0)
    {
      #initial case
      object@length <- 0;
    }

    #update list length and generate random key
    object@length<-object@length + 1;
    object@keys[object@length]<-paste(sample(c(letters, LETTERS), 15, replace =TRUE), collapse = "");
    #return "index, key" pair
    return(list("index" = object@length, "key" = object@keys[object@length]))
  }
)

Voici la sortie de cette méthode. Comme vous pouvez le voir, le code renvoie la paire "Index, Key" souhaitée, mais ne met pas à jour l'objet.

> thisObj<-new("ProtectedRObjectList")
> thisObj
An object of class "ProtectedRObjectList"
Slot "objectList":
list()

Slot "keys":
character(0)

Slot "length":
numeric(0)

> output<-getNewSlot(thisObj)
> output
$index
[1] 1

$key
[1] "cjdkDvAaNjvVKdw"

> thisObj
An object of class "ProtectedRObjectList"
Slot "objectList":
list()

Slot "keys":
character(0)

Slot "length":
numeric(0)

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top