I have the following function as part of a large codebase, which I inherited:
function = save_function(fpath, a,b,c)
    save(fpath, 'a', 'b', 'c')
end
This function is called at the end of one script, before another script is to be executed. This way, the variable names are properly saved (bad design, I know - I didn't write this code).
Now, I am making changes to the codebase, and realize that I need to store more variables in fpath. I face two options:
- Edit save_functionto accept more inputs. This would break any other code in the codebase that also uses this function
- Write a save_function2(a, b, c, d, e, ...)that I will call in the code that I change. This seems like bad design as well.
What I would ideally like to do, is to allow save_function to take in any number of arguments at a time, and save them all by the variable names that are passed in. 
Having done some googling, I found eval and eval_in, which evaluate strings as matlab code. However, there are two problems with using this:
- Using evalis horribly slow and quite dangerous
- I don't always know the types of my variables beforehand, so I can't create an elegant, generic to_stringfunction
In order to combat the flexible number of variables, I decided to use varargin and inputname as follows:
function = save_function(fpath, varargin)
    names = {}
    for i=1:size(varargin,1)
        names{i} = inputname(i+1);  % have to offset by 1 to account for fpath
    end
    save(fpath, names{:});
end
Unfortunately, since the input variables are held in varargin, they do not exist as their variable names on the stack, so the save line fails
How can I dynamically create these variables on the stack, with their variable names?
 
     
     
    