On Saturday, November 1, 2014 9:35:03 AM UTC-7, Jason Merrill wrote: > > On Saturday, November 1, 2014 9:15:43 AM UTC-7, Kapil Agarwal wrote: >> >> I need those variables as globals as otherwise I will have to pass them >> from one function to another all the time. >> > > It's generally better long-term design to pass the relevant state around > than to have it be global. One thing that helps is to define a type that > encapsulates the relevant state, so that you only have to pass one thing > around between functions instead of many. E.g. if I have > > f(a, b, c, d) > mutatea!(a) > mutateb!(b) > mutatec!(c) > mutated!(d) > return g(a,b,c,d) > end >
Sorry, this wasn't quite real Julia syntax. Should have written `function` before `f(a, b, c, d)` here and below. > and suppose that g calls another function that also depends on a, b, c, > and d, and so on, it can get kind of tedious to pass all the arguments > separately. > > But you can do > > type algorithmState > a::Ta > b::Tb > c::Tc > d::Td > end > > (where the Ta, Tb, Tc, and Td should be replaced by appropriate concrete > types). > > Then you can do > > f(x::algorithmState) > mutateState!(x) > g(x) > end > >