As for the accumulation, far better than either is to use push!. --Tim
On Friday, October 17, 2014 09:48:49 AM Tamas Papp wrote: > I am not sure if I understood the question, but if the purpose is to > store the function you created before accumulating it in a list, you > could use > > function give_funs() > funs = [] > for i in 1:5 > newfun = () -> i > funs = [funs, newfun] > end > funs > end > > Also, accumulating the vector by concatenation may not be idiomatic in > this case. A more compact way would be > > function give_funs() > map((i) -> (() -> i), 1:5) > end > > Best, > > Tamas > > On Thu, Oct 16 2014, Evan Pu <[email protected]> wrote: > > Consider this code: > > > > function give_funs() > > > > funs = [] > > for i in 1:5 > > > > function newfun() > > > > i > > > > end > > funs = [funs, newfun] > > > > end > > funs > > > > end > > > > The intention is to create 5 functions and store them in a list called > > "funs". > > All the functions take no argument, and when the ith function is called, > > it > > returns i. > > > > However, when run... > > funs1 = give_funs() > > funs1[1]() # this should give 1, but instead it gives 5 > > funs1[2]() # this should give 2, but instead it gives 5 as well > > > > This is problem goes away if I stop naming the function as "newfun" but > > instead use ananymous functions like so: > > funs = [funs, () -> i] > > however in real code I would like to give it a name so to be more clear > > what the function is suppose to compute > > > > It seems that these functions are bound by their function names, and since > > they're all named "newfun", the compiler over-write the old ones defined > > earlier. > > > > How should this be resolved?
