【发布时间】:2011-04-30 11:05:27
【问题描述】:
在试验 R 中的新引用类时,我注意到如果对方法使用“[[ ]]”表示法(X[[“doSomething”]] 而不是 X$doSomething)会出现一些奇怪的行为。这种表示法适用于字段,但我最初认为它不适用于方法,直到我发现如果执行“class(X$doSomething)”,然后可以使用“[[ ]]”。下面的简单示例说明了这一点。
setRefClass("Number",
fields = list(
value = "numeric"
),
methods = list(
addOne = function() {
value <<- value + 1
}
)
)
X <- new("Number", value = 1)
X[['value']] # 1
X[["addOne"]]() # Error: attempt to apply non-function
class(X[["addOne"]]) # NULL
class(X$addOne) # "refMethodDef"
# Now the following works!
X[["addOne"]]() # sets X$value = 2
class(X[["addOne"]]) # "refMethodDef"
我遇到这种情况的原因是因为我想将我的对象组合在一个列表中并创建一个“applyMethod”函数,该函数将指定的方法应用于其中的每个对象。因此,我需要将方法指定为字符串。有谁知道我该如何实现这一目标?
【问题讨论】:
-
引用类应该被实例化为
.A = setRefClass(<...>); .A$new()。[[是用于会员访问吗?来自?ReferenceClasses的API 是$。不妨在线条内着色。
标签: r reference-class