Get a function to return a comma-separated variable list?

Dear All,
for compactness, I was looking for a way to get a function, called with no output arguments, to return all the outputs (not just the first), analogous to e.g. C{:} for a cell array. The aim is to streamline certain codes, where the function will return a variable-length list of outputs to be used as a list of inputs for another function. As an example:
function test_output_vars()
figure(1), clf
list=plot_list1;
plot(list{:}) % Two-liner with intermediate cell array
hold on
plot(plot_list2) % Desired one-liner, but only captures first output variable
[x,y,lt]=plot_list2(); % Works of course, but not what I'm aiming at
end
function list=plot_list1()
list={1:10,1:2:19,'o-'};
end
function varargout=plot_list2()
varargout={1:10,1:2:19,'o-'};
nargout % indeed, will =1 when called with no outputs...
end
Is there any "simple" way to achieve this (besides some tricks with a custom class and overloading numArgumentsFromSubscript)?
Regards, MT

 채택된 답변

Walter Roberson
Walter Roberson 2021년 4월 25일
편집: Walter Roberson 2021년 4월 25일

0 개 추천

No, this is not possible in MATLAB. Comma list expansion is syntactic, requiring a literal {} or expression followed by dot followed by field name.

댓글 수: 2

plot(plot_list1().varargout)
function varargout = plot_list1()
list={1:10,1:2:19,'o-'};
if nargout > 0
varargout = list;
else
varargout = {struct('varargout', list)} ;
end
end
Dear Walter,
many thanks for the guidance. Okay, returning a structure array is at least a working option.
Regards, MT

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

제품

질문:

2021년 4월 25일

댓글:

2021년 4월 25일

Community Treasure Hunt

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

Start Hunting!

Translated by