S7 0.1.0
May-July 2023
-
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).
Jan-May 2023
-
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 checknow 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_environmentbecause we
need to think the consequences of this behaviour through more fully (#253).
Rest of 2022
-
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_xinstead of"x"in method print (#232)
Mar 2022
-
Exported
class_factor,class_Date,class_POSIXct, and
class_data.frame. -
New
S7_inherits()andcheck_is_S7()(#193) -
new_class()can create abstract classes (#199). -
method_call()is nowS7_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()replacesnext_method()(#110).
Feb 2022
-
class_anyandclass_missingmake 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 toclass_missing. -
Add
$.S7_objectand$<-.S7_objectmethods 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 requiresdispatch_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 requiresdispatch_argsso 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.
Jan 2022
- New
props<-for setting multiple properties simultaneously and validating
afterwards (#149). - Validation now happens recursively, and validates types before validating
the object (#149) - Classes (base types, S3, S4, and S7) are handled consistently wherever they
are used. Strings now only refer to base types. New explicitnew_S3_class()for
referring to S3 classes (#134). S4 unions are converted to S7 unions (#150). - Base numeric, atomic, and vector "types" are now represented as class unions
(#147). - Different evaluation mechanism for method dispatch, and greater restrictions
on dispatch args (#141) x@.data->S7_data(); probably to be replaced by casting.- In generic,
signature->dispatch_args. - Polished
str()andprint()methods new_class()has properties as 3rd argument (instead of constructor).