If, for some reason, I have a function that returns a comma-separated list of arguments, I would normally write them explicitly like this:
[output1, output2, output3] = someFunction(input1, input2);This means that myFunction would return three arguments and store them in output1, output2, and output3.
However, I recently wrote some code in which I could not say a priori how many output arguments I was going to have. The number of outputs depended on one of my input arguments, which happened to be a function handle.
To explain what I learned, consider a function of one input called myFunction. The input argument is a function handle @myHandle. The number of output arguments that myFunction returns is the same as the function linked to @myHandle and can change depending on my implementation of @myHandle. The following code first finds the number of outputs of @myHandle, then saves the outputs from myFunction into a cell array:
Tricky, but effective. This post on Stack Overflow helped me.
numArgsOut = nargout(@myHandle);
[myOutputs{1:numArgsOut}] = myFunction(@myHandle);
Today I also learned that I can insert a tilde into a comma-separated list of output variables if I don't want to save a particular variable. For example, if I don't care about output2 from someFunction above, but I do want to keep output1 and output3, I can type (in Matlab 2009 and later)
[output1, ~, output3] = someFunction(input1, input2);
Hoozah!