Changelog
Source:NEWS.md
S7 (development version)
When a method is not found, the error now has class
S7_error_method_not_found
.The
Ops
generic now falls back to base Ops behaviour when one of the arguments is not an S7 object (#320). This means that you get the somewhat inconsistent base behaviour, but means that S7 doesn’t introduce a new axis of inconsistency.In
new_class()
, properties can either be named by naming the element of the list or by supplying thename
argument tonew_property()
(#371).method()
now generates an informative message when dispatch fails (#387).S7 provides a new automatic backward compatibility mechanism to provide a version of
@
that works in R before version 4.3 (#326).Can create multimethods that dispatch on
NULL
.
S7 0.1.1
CRAN release: 2023-09-17
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
andclass_any
can now be unioned with|
(#337).new_object()
no longer acceptsNULL
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 avalidator
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 acceptsclass = NULL
to test if an object is any sort of S7 object (#347).
S7 0.1.0
CRAN release: 2023-08-24
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 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).
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).Base classes now show as
class_x
instead of"x"
in method print (#232)
Mar 2022
Exported
class_factor
,class_Date
,class_POSIXct
, andclass_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).
Feb 2022
class_any
andclass_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 requiresdispatch_args
(#180). This means thatnew_generic()
will typically be called without names. Eithernew_generic("foo", "x")
for a “standard” generic, ornew_generic("foo", "x", function(x, y) call_method())
for a non-standard method.new_external_generic()
now requiresdispatch_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.
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 explicit
new_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).