仅列出显式定义的方法(引用类)

时间:2014-02-18 00:21:47

标签: r oop methods reference-class

有没有办法只列出引用类的那些方法,它们在类定义中定义显式(与“系统类”继承的那些方法相对,例如{{1} }或refObjectGenerator)?

envRefClass

通过调用Example <- setRefClass( Class="Example", fields=list( ), methods=list( testMethodA=function() { "Test method A" }, testMethodB=function() { "Test method B" } ) ) 方法获得的内容(请参阅$methods()):

?setRefClass

我在寻找:

> Example$methods()
 [1] "callSuper"    "copy"         "export"       "field"        "getClass"    
 [6] "getRefClass"  "import"       "initFields"   "show"         "testMethodA" 
[11] "testMethodB"  "trace"        "untrace"      "usingMethods"

2 个答案:

答案 0 :(得分:3)

1)试试这个:

> Dummy <- setRefClass(Class = "dummy")
> setdiff(Example$methods(), Dummy$methods())
[1] "testMethodA" "testMethodB"

2)这是第二种方法,似乎可以在这里使用,但您可能想要更多地测试它:

names(Filter(function(x) attr(x, "refClassName") == Example$className, 
    as.list(Example$def@refMethods)))

答案 1 :(得分:2)

不,因为从父级“继承”的引用类中的方法实际上在生成时被复制到类中。

setRefClass("Example", methods = list(
  a = function() {}, 
  b = function() {}
))

class <- getClass("Example")
ls(class@refMethods)
#> [1]  "a"            "b"            "callSuper"    "copy"         "export"      
#> [6]  "field"        "getClass"     "getRefClass"  "import"       "initFields"  
#> [11] "show"         "trace"        "untrace"      "usingMethods"

但是你可以找到在父级中定义的方法并返回那些:

parent <- getClass(class@refSuperClasses)
ls(parent@refMethods)
#> [1]  "callSuper"    "copy"         "export"       "field"        "getClass"    
#> [6]  "getRefClass"  "import"       "initFields"   "show"         "trace"       
#> [11] "untrace"      "usingMethods"

(请注意,我忽略了你的班级有多个父母的可能性,但这很容易概括)

然后使用setdiff()找出差异

setdiff(ls(class@refMethods), ls(parent@refMethods))
#> [1] "a" "b"