Search code examples
matlabfunctioncell-array

How to force MATLAB to return all values in a nested function call?


I find it impossible to write MATLAB code without creating a huge number of superfluous, single-use variables.

For example, suppose function foo returns three column vectors of exactly the same size. Say:

function [a, b, c] = foo(n)
    a = rand(n, 1);
    b = rand(n, 1);
    c = rand(n, 1);
end

Now, suppose that bar is a function that expect as imput a cell array of size (1, 3).

function result = bar(triplet)
    [x, y, z] = triplet{:};
    result = x + y + z;
end

If I want to pass the results of foo(5), I can do it by creating three otherwise-useless variables:

[x, y, z] = foo(5);
result = bar({x, y, z});

Is there some function baz that would allow me to replace the two lines above with

result = bar(baz(foo(5)));

?

NB: the functions foo and bar above are meant only as examples. They're supposed to represent functions over which I have no control. IOW, modifying them is not an option.


Solution

  • Not possible. baz in baz(foo(5)) will only take the first output of foo, the other two would be ignored. The plain two-line variant is not that awkward. And this is not a common situation. You don't generally work with cell arrays where normal numerical arrays would do.

    You could of course just write your own wrapper for foo that returns whatever you need (i.e. containing similar two lines), in case you need to use it frequently.