オブジェクトを同時に更新し、値を返すメソッドを 1 つ作成する必要があります。S4クラスでこれを行う方法があるかどうか知りたいです。このコンテキストは、秘密鍵がわかっている場合にのみ各要素にアクセスできるリストを生成する S4 クラスを作成しようとしているということです。これを行うには、リストとキー リストの長さを同時に更新し、インデックス キー ペアを返すメソッド getNewSlot が必要です。コードを以下に示します。
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]))
}
)
このメソッドの出力は次のとおりです。ご覧のとおり、コードは目的の「インデックス、キー」のペアを返しますが、オブジェクトは更新しません。
> 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)