new_property | R Documentation |
A property defines a named component of an object. Properties are
typically used to store (meta) data about an object, and are often
limited to a data of a specific class
.
By specifying a getter
and/or setter
, you can make the property
"dynamic" so that it's computed when accessed or has some non-standard
behaviour when modified. Dynamic properties are not included as an argument
to the default class constructor.
See the "Properties: Common Patterns" section in vignette("class-objects")
for more examples.
new_property(
class = class_any,
getter = NULL,
setter = NULL,
validator = NULL,
default = NULL,
name = NULL
)
class |
Class that the property must be an instance of.
See |
getter |
An optional function used to get the value. The function
should take If a property has a getter but doesn't have a setter, it is read only. |
setter |
An optional function used to set the value. The function
should take |
validator |
A function taking a single argument, The job of a validator is to determine whether the property value is valid.
It should return The validator will be called after the |
default |
When an object is created and the property is not supplied,
what should it default to? If |
name |
Property name, primarily used for error messages. Generally
don't need to set this here, as it's more convenient to supply as a
the element name when defining a list of properties. If both |
An S7 property, i.e. a list with class S7_property
.
# Simple properties store data inside an object
Pizza <- new_class("Pizza", properties = list(
slices = new_property(class_numeric, default = 10)
))
my_pizza <- Pizza(slices = 6)
my_pizza@slices
my_pizza@slices <- 5
my_pizza@slices
your_pizza <- Pizza()
your_pizza@slices
# Dynamic properties can compute on demand
Clock <- new_class("Clock", properties = list(
now = new_property(getter = function(self) Sys.time())
))
my_clock <- Clock()
my_clock@now; Sys.sleep(1)
my_clock@now
# This property is read only, because there is a 'getter' but not a 'setter'
try(my_clock@now <- 10)
# Because the property is dynamic, it is not included as an
# argument to the default constructor
try(Clock(now = 10))
args(Clock)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.