MATLAB: Generate comma separated list in single line of code

indexingMATLAB

I would like to put a piece of code within an expression which generates a comma separated list, without having to create a dummy variable. Is this possible? I was trying to use subsref(), like this:
subsref(repmat({'A'},1,4),struct('type','{}','subs',{{':'}}))
But this only returns a single output. It seems like subsref can't actually behave like A{:} . Is there another way?
The specific reason I would like to do this is for indexing an array where the dimension is unknown prior to runtime. So instead of (for example)
idx = [{1} repmat({':'},1,ndims(inputData)-1)];
output = A(idx{:});
I could do something like
output = A(<expression>);

Best Answer

"I would like to put a piece of code within an expression which generates a comma separated list, without having to create a dummy variable. Is this possible?"
No.
Read this answer and the comments below for the reasons why.
"But this only returns a single output."
No, actually your code works perfectly and returns all of the elements of the cell array, just as we would expect. You just didn't define output variables for all of the outputs of the function:
>> Z = {'A','B','C','D'};
>> [a,b,c,d] = subsref(Z,struct('type','{}','subs',{{':'}}))
a =
A
b =
B
c =
C
d =
D
Because subsref is a perfectly normal function its outputs are only allocated to multiple output variables when those variables are defined in a comma-separated list as output arguments. Exactly like any other function, we would not expect
max(X)
to return both of its output arguments until we have defined both of them in a comma-separated list:
[val,idx] = max(X)
Exactly the same applies to subsref, because it is a normal function as well, and is consistent with what the documentation states regarding returning multiple function outputs:
This all begs the question: what is {:} if not a function? Answer: I have no idea.
Summary: your question is basically the wrong way around. You asked about why subsref behaves strangely, whereas in fact subsref behaves perfectly normally for a MATLAB function. It is actually {:} that behaves strangely: you should be asking about that!