There is an issue for keyword constructors: https://github.com/JuliaLang/julia/issues/5333 and a related pull request: https://github.com/JuliaLang/julia/pull/6122
Anyway, it should be possible to make a macro for that but I'm not aware of an available one. Alternatively you can use a Dict. Also, breaking up the parameters in sub-parameter types might make it a bit more managable, i.e. 4x5 parameters instead of 20 parameters in one type. Related is packing and unpacking of parameters: https://groups.google.com/forum/#!searchin/julia-users/macro$20parameter/julia-users/IQS2mT1ITwU/vrE9FCaQH6EJ On Sat, 2015-01-17 at 01:34, Andrew <[email protected]> wrote: > 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? > > --- > I did find a related post > here. > https://groups.google.com/forum/#!searchin/julia-users/constructor$20keyword$20arguments/julia-users/xslxrihfO30/jV2awP5tbpEJ > > . Someone suggests that you can define a constructor like, > 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?
