Using a method/function within a reference class method of the same name
在R中定义一个新的引用类时,有一组期望的锅炉板方法(按R约定),如
有没有一种方法可以告诉一个方法忽略它自己的方法,除非专门使用.self$调用?
例子:
1 2 3 4 5 6 7 8 9 10 11 12 | tC <- setRefClass( 'testClass', fields = list(data='list'), methods = list( length=function() { length(data) } ) ) example <- tC(data=list(a=1, b=2, c=3)) example$length() # Will cause error as length is defined without arguments |
或者,我们可以选择为类定义s4方法(因为引用类是引擎盖下的s4类),但这似乎与引用类的思想相反……
编辑:为了避免将重点放在事先知道数据类的实例上,请考虑以下示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | tC <- setRefClass( 'testClass', fields = list(data='list'), methods = list( length=function() { length(data) }, combineLengths = function(otherObject) { .self.length() + length(otherObject) } ) ) example <- tC(data=list(a=1, b=2, c=3)) example$combineLength(rep(1, 3)) # Will cause error as length is defined without arguments |
号
我知道您可以将自己的调度写到正确的方法/函数,但这似乎是一种常见的情况,我认为它可能已经在方法包中解决了(类似于
因此,我的问题是,如果之前不清楚的话,我道歉:是否有方法可以忽略方法定义中的引用类方法和字段,并且完全依赖于这些方法和字段。自我访问这些方法,这样类外部定义的方法/函数就不会被屏蔽?
这个例子不太清楚。我不知道你为什么不知道你的方法的名称空间。不管怎样,这里有一些解决这个问题的方法:
例如:
1 2 3 4 5 6 7 8 9 10 | methods = list( .show =function(data) { ns = sub(".*:","",getAnywhere("show")$where[1]) func = get("show",envir = getNamespace(ns)) func(data) }, show=function() { .show(data) } ) |
例如:
1 2 3 4 5 6 7 8 9 | tC6 <- R6Class('testClass', public = list( data=NA, initialize = function(data) { if (!missing(data)) self$data <- data }, show=function() show(self$data) ) ) |
号