foo1 <- new_class("foo1", properties = list(x = class_integer))
foo2 <- new_class("foo2", foo1, properties = list(y = class_double))
# S7 provides a default implementation for coercing an object to one of
# its parent classes:
convert(foo2(x = 1L, y = 2), to = foo1)
# For all other cases, you'll need to provide your own.
try(convert(foo1(x = 1L), to = class_integer))
method(convert, list(foo1, class_integer)) <- function(from, to) {
from@x
}
convert(foo1(x = 1L), to = class_integer)
# Note that conversion does not respect inheritance so if we define a
# convert method for integer to foo1
method(convert, list(class_integer, foo1)) <- function(from, to) {
foo1(x = from)
}
convert(1L, to = foo1)
# Converting to foo2 will still error
try(convert(1L, to = foo2))
# This is probably not surprising because foo2 also needs some value
# for `@y`, but it definitely makes dispatch for convert() special
Run the code above in your browser using DataLab