API
Parameters.Parameters — ModuleThis is a package I use to handle numerical-model parameters, thus the name. However, it should be useful otherwise too. It has two main features:
- keyword type constructors with default values, and
- unpacking and packing of composite types and dicts.
The macro @with_kw which decorates a type definition to allow default values and a keyword constructor:
julia> using Parameters
julia> @with_kw struct A
a::Int = 6
b::Float64 = -1.1
c::UInt8
end
julia> A(c=4)
A
a: 6
b: -1.1
c: 4Unpacking is done with @unpack (@pack! is similar):
struct B
a
b
c
end
@unpack a, c = B(4,5,6)
# is equivalent to
BB = B(4,5,6)
a = BB.a
c = BB.cParameters.reconstruct — Methodreconstruct(pp; kws...
reconstruct(T::Type, pp; kws...)Make a new instance of a type with the same values as the input type except for the fields given in the keyword args. Works for types, Dicts, and NamedTuples. Can also reconstruct to another type, which is probably mostly useful for parameterised types where the parameter changes on reconstruction.
Note: this is not very performant. Check Setfield.jl for a faster & nicer implementation.
julia> using Parameters
julia> struct A
a
b
end
julia> x = A(3,4)
A(3, 4)
julia> reconstruct(x, b=99)
A(3, 99)
julia> struct B{T}
a::T
b
end
julia> y = B(sin, 1)
B{typeof(sin)}(sin, 1)
julia> reconstruct(B, y, a=cos) # note reconstruct(y, a=cos) errors!
B{typeof(cos)}(cos, 1)Parameters.type2dict — MethodTransforms a type-instance into a dictionary.
julia> struct T
a
b
end
julia> type2dict(T(4,5))
Dict{Symbol,Any} with 2 entries:
:a => 4
:b => 5Note that this uses getproperty.
Parameters.with_kw — FunctionThis function is called by the @with_kw macro and does the syntax transformation from:
@with_kw struct MM{R}
r::R = 1000.
a::R
endinto
struct MM{R}
r::R
a::R
MM{R}(r,a) where {R} = new(r,a)
MM{R}(;r=1000., a=error("no default for a")) where {R} = MM{R}(r,a) # inner kw, type-paras are required when calling
end
MM(r::R,a::R) where {R} = MM{R}(r,a) # default outer positional constructor
MM(;r=1000,a=error("no default for a")) = MM(r,a) # outer kw, so no type-paras are needed when calling
MM(m::MM; kws...) = reconstruct(mm,kws)
MM(m::MM, di::Union{AbstractDict, Tuple{Symbol,Any}}) = reconstruct(mm, di)
macro unpack_MM(varname)
esc(quote
r = varname.r
a = varname.a
end)
end
macro pack_MM(varname)
esc(quote
varname = Parameters.reconstruct(varname,r=r,a=a)
end)
endParameters.with_kw_nt — MethodDo the with-kw stuff for named tuples.
Parameters.@consts — MacroParameters.@with_kw — MacroMacro which allows default values for field types and a few other features.
Basic usage:
@with_kw struct MM{R}
r::R = 1000.
a::Int = 4
endFor more details see manual.
Parameters.@with_kw_noshow — MacroAs @with_kw but does not define a show method to avoid annoying redefinition warnings.
@with_kw_noshow struct MM{R}
r::R = 1000.
a::Int = 4
endFor more details see manual.