Skip to content

rafaqz/FieldDefaults.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FieldDefaults

Build Status codecov.io

A lightweight package that adds keyword defaults to (the also lightweight!) FieldMetadata.jl.

The @default_kw macro adds a keyword arg constructor to a type:

@default_kw struct MyStruct
    foo::Int | 1
    bar::Int | 2
end

julia> m = MyStruct()
julia> m.foo
1

julia> m.bar
2

It has a similar outcome (though entirely difference mechanism) to Parameters.jl. It has some limitations: presently it only adds an outside constructor, and defaults can't use the other default values.

But it has some other nice features. Defaults can be added to a struct that has already been defined by prefixing re to the macro name, as in FieldMetadata.jl:

struct SomeoneElseDefined
    foo::Int
    bar::Int
end

@redefault struct SomeoneElseDefined
    foo | 7
    bar | 19
end

Each default value can also be overridden by declaring a new function:

default(::YourType, ::Type{Val{:fieldname}}) = 99

The u@default_kw behaves as @default_kw but combines defaults with the units metadata field in the constructor.

Additional info

Extra metadata fields are easy to add to a struct at definition time or afterwards, using a @metadata macro.

Default values of single structs or more complex composite types can be flattened to tuples or vectors using Flatten.jl. This can be combined with fieldnames, other metadata and current field values for generating tabular displays, or other uses.