This seems to be more useful(depending on your use cases): function Parameters( eta = 3, sigma = 1, rho = 5, xi = 2, agrid = linrange(1,10,10), beta = 4 ) @CallDefaultConstructor Parameters end Like this, you can replace parts of the defaults ;) And if you're at it, you could just have a macro like this *@with_keywordconstructor* begin immutabe Parameters{T <: Real} sigma::T = 1 xi::T = 2 ... end end
And If you're already at it, you could write a macro, which lets you define defaults for every field Am Samstag, 17. Januar 2015 01:34:19 UTC+1 schrieb Andrew: > > 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? >