Thanks for this clear explanation. If I do the following, is my function type still unstable? How do you compare the following solution to yours in terms of efficiency, style, etc?
function compute_outputs(..., output2Flag) # do some stuff, get x, y, and z # compute output 1 output1 = ... if output2Flag # compute output 2 output2 = ... else output2 = SparseMatrixCSC[] # the same type as output2 when it is computed end return output1, output2 end On Thursday, March 5, 2015 at 10:58:02 AM UTC-5, Steven G. Johnson wrote: > > > > On Wednesday, March 4, 2015 at 6:38:28 PM UTC-5, Pooya wrote: >> >> Thanks for your response. I am not sure what you mean by a lower-level >> subroutine. Is that a function inside another one? If yes, How does the >> scope of variables work for that? >> > > From your description, right now you have: > > function compute_two_outputs(...) > ...do some stuff, get x, y, and z.... > ....use x, y, and z to compute output1.... > ....use output1, x, y, and z to compute output2.... > return output1, output2 > end > > Instead, if you don't always want to compute both outputs, but still want > to write the shared computations only once, you can refactor the code to > pull out the shared computations into another function (that is "lower > level" in the sense that users won't normally call it directly): > > function some_stuff(...) > ...do some stuff, get x, y, and z.... > ....use x, y, and z to compute output1.... > return output1,x,y,z > end > > function compute_output1(...) > return some_stuff(...)[1] > end > > function compute_two_outputs(...) > output1,x,y,z = some_stuff(...) > ....use output1, x, y, and z to compute output2.... > return output1, output2 > end > > >