Suppose I have a model which contains many parameters. I'd like to store my parameters in a type, for example
type Parameters
sigma::Real
xi::Real
eta::Real
beta::Real
rho::Real
agrid::FloatRange
end
and then I need to assign some values to my parameters. The natural way I see to do this is
params = Parameters(1,2,3,4,5,linrange(1,10,10))
or something like that. However, the fact that I need to remember the order in which I defined these parameters means there is some chance of error. In reality I have about 20 parameters, so defining them this way would be quite annoying.
It would be nice if there was a constructor that would let me use keyword arguments, as in
params = Parameters(sigma=1,xi=2,eta=3,beta=4,rho=5,agrid=linrange(1,10,10)) .
I know I could write my own constructor and use keyword arguments, but then I think I'd still need to use the ordered constructor to write that one.
Is there an easy way to do this? Maybe a macro that could automatically define a constructor with keyword arguments?(I don't know much about metaprogramming). Alternatively, is there is a cleaner way to store parameters that doesn't use types?
---
Foo(;bar=1, baz=2) = new(bar, baz)
which does what I want. Is there a way to macro that so that it's automatically defined for every field in the type?