Question

Is there a quick and dirty way to test whether an instance is from a reference class?

The standard R object tests yield the following - but nothing that seems to exclusively mark a reference class.

classy <- setRefClass('classy',
    fields = list(
        count = 'numeric'
    ),
    methods = list(
        initialize = function( data=NULL ) {
            .self$data <<- data
        }
    )
)

instance <- classy$new() # instantiation

isS4(instance) # TRUE
mode(instance) # "S4"
typeof(instance) # "S4"
class(instance) # [1] "classy" attr(,"package") [1] ".GlobalEnv"
dput(instance) # new("classy", .xData = <environment>)
str(instance) # 
# Reference class 'classy' [package ".GlobalEnv"] with 1 fields
#  $ count: num(0) 
#  and 13 methods, of which 1 are possibly relevant:
#    initialize
Was it helpful?

Solution

Try this:

 inherits(instance, "envRefClass")
# should return [1] TRUE

This is found in the "Inheritance" section of help(ReferenceClasses). And I suspect that John Chambers might object to calling this "dirty".

Apropos Hadley's comment, is is documented to behave mostly the same as inherits but has the added capacity to recognize conditional inheritance:

is(instance, "envRefClass")
#TRUE
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top