我想创建一个列表(基本上是一个带有自定义类的对象),它在一个元素中保存数据库,在另一个元素中保存一个函数。初始化列表后,我希望能够调用该函数并让它修改包含数据库的元素。这是我的意思的一个例子
newObject<- function(dataSet){
rtrn <- list()
rtrn$dataHolder <- dataSet
rtrn$addition <- function(numberToAdd){
rtrn$dataHolder <- rtrn$dataHolder + numberToAdd
}
class(rtrn) <- "customClass"
return(rtrn)
}
x <- newObject(c(1,2,3))
x$addition(1)
调用addition()方法实际上并没有修改dataHolder元素。我已经尝试了&lt;&lt; - 作为一个赋值运算符(因为我在函数之外修改变量),但这似乎不起作用
答案 0 :(得分:0)
您的示例几乎是closure。如果你纠正了&#34;班级&#34;致:
newObject<- function(dataSet) {
dataHolder <- dataSet
addition <- function(numberToAdd){
dataHolder <<- dataHolder + numberToAdd
}
getdata <- function() {
dataHolder
}
rtrn <- list(addition = addition, getdata = getdata)
class(rtrn) <- "customClass"
return(rtrn)
}
你接近你想要的东西:
x <- newObject(c(1,2,3))
x$getdata()
[1] 1 2 3
x$addition(1)
x$getdata()
[1] 2 3 4
由于您定义了自己的class,因此您还可以定义打印功能:
print.customClass <- function(x){ print(x$getdata()) }
看到&#34;内饰&#34;由
x
[1] 2 3 4