Accessors
The goal of Accessors.jl is to make updating immutable data simple. It is the successor of Setfield.jl.
Usage
Say you have some immutable data structure, such as a NamedTuple:
julia> nt = (a=1, b=2)
(a = 1, b = 2)
If you try something like nt.b=3, it will throw an error. But using Accessors, we can change it anyways:
julia> using Accessors
julia> @set nt.b=3
(a = 1, b = 3)Note that this only returns an updated copy of nt, and does not overwrite or mutate the value bound to nt:
julia> nt
(a = 1, b = 2)To overwrite the old definition, we can rebind nt to the new version:
julia> nt = @set nt.b=3
(a = 1, b = 3)
julia> nt
(a = 1, b = 3)As this is a common use case, the convenience macro @reset rebinds the variable (nt) to the updated version:
julia> @reset nt.b=4
(a = 1, b = 4)
julia> nt
(a = 1, b = 4)For more detail, see this tutorial and/or watch this video:
Featured extensions
- AccessorsExtra.jl [docs] introduces additional optics and related functions that are considered too opinionated or too experimental for inclusion in
Accessors.
