Creates an abstract R6 class by placing a thin wrapper around R6::R6Class which causes an error to be thrown if the class is directly constructed instead of one of its descendants.
An abstract class is a class that cannot be constructed directly. Instead they are used to define common fields/methods for child classes that inherit from them.
All arguments of R6::R6Class can be used as usual, see full details at R6::R6Class.
Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1996). Design Patterns: Elements of Reusable Software. Addison-Wesley Professional Computing Series (p. 395).
library(R6)
#>
#> Attaching package: ‘R6’
#> The following objects are masked from ‘package:ooplah’:
#>
#> is.R6, is.R6Class
ab <- AbstractClass("abstract", public = list(hello = "Hello World"))
if (FALSE) {
# errors
ab$new()
}
child <- R6Class("child", inherit = ab)
child$new()$hello
#> [1] "Hello World"