有没有办法只列出引用类的那些方法,它们在类定义中定义显式(与“系统类”继承的那些方法相对,例如{{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"
答案 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"