File Exchange

image thumbnail

Multiple assignment

version (2.22 KB) by Miroslav Balda
The function arg2vars enables to assign more items to a list of variables


Updated 26 Feb 2009

View License

The function arg2vars serves for assigning of values from input argument(s) to variables declared in the output list in the place of
the function calling. Not assigned output variables are empty, while superfluous arguments are cut to a number of output variables. Number of allocated items is a minimum out of number of input arguments and number of output variables.

[var1,...,varn] = arg2vars(x)
% x A single input argument. It can be a vector or a matrix of consistent elements, or a cell array of items. Elements of matrices will be stored columnwise.
% [var1,...] List of names of output parameters. If length of the list were greater than the number of items in x, superfluous variables become empty. In turn, only such a number of argument items is used to fill all variables in the list. No errors or warnings are displayed.
[var1,...,varn] = arg2vars(x1,...,xm)
% x1,...,xm list of arguments (scalars, matrices, arrays, texts, etc.)

[a,b,c,d,e,f] = arg2vars(-1.234, 'abcde', [1,exp(1),pi], 1:5, eye(3))
% a = -1.2340
% b = abcde
% c = 1.0000 2.7183 3.1416
% d = 1 2 3 4 5
% e = 1 0 0
% 0 1 0
% 0 0 1
% f = []

[a,b,c,d] = arg2vars({'ABC','DEFG','HIJK'})
% a=A, b=B, c=C, d=D, e=E, f=F
[a,b,c] = arg2vars({{'ABC'},{'DEFG'}})
% a = [{1x1 cell}, {1x1 cell}]
% b = [], c = []
% a{:}(2) = 'DEFG', a{:}{2} = DEFG

[a,b,c] = arg2vars({{'ABC'}},{{'DEFG'}})
% a = {1x1 cell}, a{:} = 'ABC'
% b = {1x1 cell}, b{:} = 'DEFG'
% c = []

[a,b,c] = arg2vars(zeros(1,5),pi,{{'a','bcd','e'}},0);
% a = 0 0 0 0 0
% b = 3.1415926...
% c{:} = 'a' 'bcd' 'e'

[E,b,c,sfa,efa,na,Ka,Nc,sc,w,ec,Nb,t,sigv,DL,D,Nz,ssq,flag,figh] = arg2vars({repmat([],1,30)});
% Defines all variables empty

Cite As

Miroslav Balda (2021). Multiple assignment (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (2)

Miroslav Balda

I am sorry that I have not known that the function deal exist. I always learn something new. BTW, the last example may be simplified on the right hand side of assignment by arg2vars([]).

Jos (10584)

Most of this behavior can be handled by DEAL, for instance, a,b,c] = deal([])
(btw, the later example is rather strange as I would expect
"[E,b,c...] = arg2vars" to do the job ...)

The need for putting cell arrays into a cell to assign it to a single variable is in my opinion very contra-intuitive given the fact that a regular array is not split into separate variables.

To me, the only advantage of this submission seems to be that unassigned output arguments are set to empty, but a simple wrapper function around deal will do the same:

function [varargout] = mydeal(varargin) ;

varargout([1 2:nargout]) = {[]} ; % return [] when called without any in/output arguments
if nargin,
N = max(min(nargin,nargout), 1) ;
% how many things do we have to be DEALt with?
[varargout{1:N}] = deal(varargin{1:N}) ;

MATLAB Release Compatibility
Created with R2006b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!