MATLAB Answers

Multiple Outputs in object method?

16 views (last 30 days)
David on 30 Jun 2015
Commented: David on 1 Jul 2015
I'm working with OOP in matlab and I want to define a function to output multiple arguments. The idea is to easily concatenate the output or put in a cell array depending on my usage.
function varargout = getPoints(self)
if numel(self) > 1
for i = 1:numel(self)
varargout{i} = self(i).getPoints;
%Computation to get the points, results is always a 2x2 matrix
The idea now is now in other objects I can easily manipulate the results like
a = cat(3, allObjects.getPoints);
or like this
b = {allObjects.getPoints};
But I always just get one output out, only the first entry. How can I achieve the desired effect? Thanks in advance!

Accepted Answer

Guillaume on 30 Jun 2015
The problem is that when you do
cat(3, allObjects.getPoints)
you're only asking for one output. So, only the first cell of varargout is going to be used.
You could work around this, by assigning the output of your getPoints function to a cell array of the right size, like so:
c = cell(1, numel(allObjects));
[c{:}] = allObjects.GetPoints;
cat(3, c{:})
The other option is to change GetPoints to always have a single output:
function points = GetPoints(self)
%points is a cell array if self is an array, a matrix otherwise
if numel(self)
points = arrayfun(@(s) s.GetPoints, self, 'UniformOutput', false);
%or use your loop
In which case, the code on the receiving side is simply:
points = allObjects.GetPoints;
cat(3, points{:})
David on 1 Jul 2015
Yes I know that, but that means I cannot pass additional options and overloading in child classes gets cumbersome. Thanks for the help!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by