Classes get a more informative print method (#346).
Correctly register S3 methods for S7 objects with a package (#333).
External methods are now registered using an attribute of the S3
methods table rather than an element of that environment. This prevents
a warning being generated during the “code/documentation mismatches”
check in R CMD check
(#342).
class_missing
and class_any
can now be
unioned with |
(#337).
new_object()
no longer accepts NULL
as
.parent
.
new_object()
now correctly runs the validator from
abstract parent classes (#329).
new_object()
works better when custom property
setters modify other properties.
new_property()
gains a validator
argument that allows you to specify a per-property validator
(#275).
new_property()
clarifies that it’s the user’s
responsibility to return the correct class; it is not
automatically validated.
Properties with a custom setter are now validated after
the setter has run and are validated when the object is constructed or
when you call validate()
, not just when you modify them
after construction.
S7_inherits()
now accepts class = NULL
to test if an object is any sort of S7 object (#347).
new_external_generic()
is only needed when you want
a soft dependency on another package.
methods_register()
now also registers S3 and S4
methods (#306).
Subclasses of abstract class can have readonly properties (#269).
During construction, validation is now only performed once for each element of the class hierarchy (#248).
Implemented a better filtering strategy for the S4 class hierarchy so you can now correctly dispatch on virtual classes (#252).
New set_props()
to make a modified copy of an object
(#229).
R CMD check
now passes on R 3.5 and greater (for
tidyverse compatibility).
Dispatching on an evaluated argument no longer causes a crash (#254).
Improve method dispatch failure message (#231).
Can use |
to create unions from S7 classes
(#224).
Can no longer subclass an environment via
class_environment
because we need to think the consequences
of this behaviour through more fully (#253).
Add [.S7_object
, [<-.S7_object
,
[[.S7_object
, and [[<-.S7_object
methods to
avoid “object of type ‘S4’ is not subsettable” error (@jamieRowen,
#236).
Combining S7 classes with c()
now gives an error
(#230)
Base classes now show as class_x
instead of
"x"
in method print (#232)
Exported class_factor
, class_Date
,
class_POSIXct
, and class_data.frame
.
New S7_inherits()
and check_is_S7()
(#193)
new_class()
can create abstract classes
(#199).
method_call()
is now S7_dispatch()
(#200).
Can now register methods for double-dispatch base Ops (currently only works if both classes are S7, or the first argument is S7 and the second doesn’t have a method for the Ops generic) (#128).
All built-in wrappers around base types use class_
.
You can no longer refer to a base type with a string or a constructor
function (#170).
convert()
allows you to convert an object into
another class (#136).
super()
replaces next_method()
(#110).
class_any
and class_missing
make it
possible to dispatch on absent arguments and arguments of any class
(#67).
New method_explain()
to explain dispatch
(#194).
Minor property improvements: use same syntax for naming short-hand and full property specifications; input type automatically validated for custom setters. A property with a getter but no setter is read-only (#168).
When creating an object, unspecified properties are initialized
with their default value (#67). DISCUSS: to achieve this, the
constructor arguments default to class_missing
.
Add $.S7_object
and $<-.S7_object
methods to avoid “object of type ‘S4’ is not subsettable” error
(#204).
Dispatch now disambiguates between S4 and S3/S7, and, optionally, between S7 classes in different packages (#48, #163).
new_generic()
now requires
dispatch_args
(#180). This means that
new_generic()
will typically be called without names.
Either new_generic("foo", "x")
for a “standard” generic, or
new_generic("foo", "x", function(x, y) call_method())
for a
non-standard method.
new_external_generic()
now requires
dispatch_args
so we can eagerly check the
signature.
Revamp website. README now shows brief example and more info in
vignette("S7")
. Initial design docs and minutes are now
articles so they appear on the website.
props<-
for setting multiple properties
simultaneously and validating afterwards (#149).new_S3_class()
for referring to S3 classes (#134).
S4 unions are converted to S7 unions (#150).x@.data
-> S7_data()
; probably to be
replaced by casting.signature
->
dispatch_args
.str()
and print()
methodsnew_class()
has properties as 3rd argument (instead of
constructor).